Estoy haciendo una aplicación Access 2000 para consultas y reportes sobre una base de datos MS-SQL SERVER. Las consultas las hago con un formulario que muestra los resultados en un subformulario. Quisiera saber cómo puedo exportar los resultados del subformulario a un archivo Excel mediante un botón de comando. Espero que me puedan ayudar pues lo necesito urgente. Gracias de antemano por la atención y estaré esperando la ayuda que me puedan dar.
Juan Peláez
En principio asumo que tu aplicación es un MDB con las tablas de SQL Server adjuntas. Si, por el contrario la aplicación es un ADP, la cosa varía un poco. La solución a lo que pides depende de como tengas ligados el formulario de selección con el subformulario: Caso A: El Origen de datos es una Tabla o Consulta fijos (lo llamaré ORIGENDATOS) y la unión del formulario de selección y el subform la realizas mediante las propiedades "Vincular campos ..." del control SubForm. Caso B: El el formulario de selección tienes un botón que, al pulsarlo genera una sentencia SQL que grabas en la propiedad "origen de datos" del formulario incrustado en el Control SubForm. Como te digo, cada caso tiene su solución y es relativamente sencilla. Caso A. Pasos. 1.- Generas una consulta que tenga exactamente la misma estructura que ORIGENDATOS y la salvas. La llamaremos ORIGENDATOS_AEXCEL 2.- Abres ORIGENDATOS_AEXCEL en modo diseño. Buscas los campos que usas de unión con el formulario de selección. Para cada uno de ellos, en la línea de Criterio, escribes [Formularios]. [FORMULARIO_DE_SELECCION].[CAMPO_DEL_FORMULARIO] Donde FORMULARIO_DE_SELECCION es el nombre del Formulario de selección y CAMPO_DEL_FORMULARIO es el nombre del control del Formulario de selección que tienes ligado con el campo de la consulta en el que estás. 3.- Una vez realizado el paso 2 para todos los campos de unión, salvas la consulta y la cierras. 4.- Abres el FORMULARIO_DE_SELECCION en modo diseño. Añade un botón de comando al que llamaremos cmdAExcel. En el evento "Al hacer click" escribiremos el siguiente código: Private Sub cmdAExcel_Click() DoCmd.TransferSpreadSheet acExport, FORMATO_EXCEL, "ORIGENDATOS_AEXCEL", "NOMBRE_DEL_ARCHIVO" MsgBox "Exportación a Excel Terminada con éxito.", vbApplicationModal + vbInformation + vbOKOnly, "Exportar A Excel" End Sub Donde: FORMATO_EXCEL: Cuando tecleas la función, de da a elegir entre varios formatos de Hoja de Cálculo. Elige el que prefieras. ORIGENDATOS_AEXCEL: Es el nombre de kla consulta que hemos creado. Tiene que ir, como ves, entre comillas. NOMBRE_DEL_ARCHIVO: Nombre del archivo a generar con la ruta completa. Compilas el código, salvas el formulario y a jugar. Caso B. Pasos. En este caso, el único paso es el 4º paso del caso anterior pero con una ligera Modificación en el código: Private Sub cmdAExcel_Click() Dim oQDef as DAO.QueryDef Set oQDef = DBEngine(0)(0).QueryDefs("NOMBRE_A_ELEGIR") oQDef.SQL = "SENTENCIA_SQL" Set oQDef = Nothing DoCmd.TransferSpreadSheet acExport, FORMATO_EXCEL, "NOMBRE_A_ELEGIR", "NOMBRE_DEL_ARCHIVO" MsgBox "Exportación a Excel Terminada con éxito.", vbApplicationModal + vbInformation + vbOKOnly, "Exportar A Excel" End Sub Donde: NOMBRE_A_ELEGIR: Es un nombre que tienes que elegir para la Consulta que va a crear en tu base de datos. Siempre será la misma consulta (para esto está). SENTENCIA_SQL: Es la sentencia que genera tu formulario de Selección y que usa como origen de datos para el subformulario. Si usas este método debes tener cuidado con lo siguiente: Si todos los usuarios usan el mismo MDB, deberás arbitrar un método (el más eficaz es usar el nombre de máquina mediante una sencilla llamada al API de Windows) de forma que cada usuario concurrente generen una Consulta distinta. Si todos usan la misma, puede haber problemas de bloqueo o de que los usuarios no consiguen la información deseada porque otros usuarios les "pisan la consulta".
Gracias por responder. La verdad hace mucho tiempo que hice la pregunta, y pues ya la tenía solucionada. De todos modos me sirvió para ver algunos detalles que me pueden servir. Muchas gracias por tu interés. Hasta pronto, Juan.