Ejecutar una consulta en Access desde Excel
Si bien es cierto que Excel es una herramienta poderosa para aplicar las Macros, muchas veces los datos no se encuentran en el mismo documento de Excel, sino en otro tipo de archivo de diferente formato (Para este caso, Microsoft Access) Esta Macro sirve para importar las consultas de Microsoft Access a Microsoft Excel sin la necesidad de estar copiando y pegando. Excel saca los datos de una consulta en un documento de Access.
Antes de empezar a correr la Macro, se deben hacer las siguientes Acciones:
- Establecer referencia a un Microsoft Access Object Library. Para hacer esto, se abre la ventana de VBA (ALT + F11) y se selecciona Herramientas➜Referencias. Después se busca hasta encontrar “Microsoft Access XX Object Library”, en donde XX es la versión de Access que se tenga instalada en la computadora utilizada. Se selecciona y se hace clic en Aceptar.
- Se necesita también establecer una referencia a to Microsoft DAO Object Library. Del mismo modo, se ingresa al VBA, Herramientas➜Referencias y se busca la opción Microsoft DAO XX Object Library, en donde XX es la versión de Access que se tenga instalada en la computadora utilizada. Se selecciona y se hace clic en Aceptar.
Se procede a crear una base de Datos en Access y una consulta en ese mismo archivo o a utilizar el archivo adjunto “BASE DE DATOS ACCESS”, el cual es un archivo con un ejemplo sencillo sobre una agenda personal.
Luego se copia el siguiente código en Excel
Sub Consulta_Access()
'Paso 1:Declarar Variables
Dim MyDatabase As DAO.database
'MyDatabase: Expone la base de datos de Access por medio de la DAO Object Library
Dim MyQueryDef As DAO.QueryDef
'MyQueryDef: Sirve como una variable de almacenamiento para contener la consulta objetivo.
Dim MyRecordset As DAO.Recordset
'MyRecordset: Guarda los resultados de la base de datos.
Dim i As Integer
'i: Se utiliza para añadir titulos a las columnas
'Paso 2: Identificar la base de datos y la consulta.
'Se identifica la base de datos que contiene la consulta requerida asi como la consulta que correrá el programa.
'Al haberle asignado a QueryDef una consulta le permite al usuario abrir la consulta en la memoria.
'Notese que para ejecutar la macro se debe colocar la ruta correspondiente del archivo en access para el cual se desea obtener la consulta, asi como tambien el nombre de la consulta.
Set MyDatabase = DBEngine.OpenDatabase _
("I:\PUCP\EXCEL AVANZADO MACROS\Tareas\Tema 5\BASE DE DATOS.accdb")
Set MyQueryDef = MyDatabase.QueryDefs("CONSULTA")
'Paso 3: Abrir la consulta. Los resultados de la consulta son archivadas dentro de MyRecordset.
'Una vez que se encuentren en esa variable, se pueden exportar a Excel
Set MyRecordset = MyQueryDef.OpenRecordset
'Paso 4: Deja en blanco la hoja de calculo.
Sheets("Sheet1").Select
ActiveSheet.Range("A6:K10000").ClearContents
'Paso 5: Se copian los datos a Excel, para este caso a la celda "E20"
ActiveSheet.Range("E20").CopyFromRecordset MyRecordset
'Paso 6: Añadir títulos a las columnas
For i = 1 To MyRecordset.Fields.Count
ActiveSheet.Cells(6, i).Value = MyRecordset.Fields(i - 1).Name
Next i
End Sub
Se verifica que los campos como nombre del archivo Access y el nombre de la Consulta sean coherentes, así como también la ruta correcta.
Finalmente, se corre la macro y se verifican que los datos se encuentren en el archivo Excel.
Descargar Ejemplo (EN EXCEL)
Mario Paredes
18/04/2015 a las 6:23 pm
Muy bueno, me salió justo como lo había imaginado.
Gracias !!!
27/06/2015 a las 5:27 am
muy útil
gracias!
08/03/2016 a las 6:16 pm
La linea
Set MyDatabase = DBEngine.OpenDatabase
Me manda error'3343' Error definido por la aplicación o el objeto,
Sabes a que se debe?
02/06/2016 a las 5:16 am
El post es antiguo pero la información sigue vigente.
Cuando haces el Set MyQueryDef = MyDatabase.QueryDefs(“CONSULTA”) lanzas la consulta que ya esta dada de alta en Access. Para ampliar el post y hacerlo todavía más útil ¿Como puedo filtrar el resultado de esa consulta con información de una casilla del excel origen?
08/06/2016 a las 9:13 am
Hola, funciona tal cual se menciona. Ahora les consulto lo siguiente, en el Access tengo un total de 2.000.000 de filas por lo que no tengo forma de bajar esta info en el Excel. Existe algo donde pueda bajar solo la info que necesito. Por medio de modificar la consulta de Access desde Excel. ¿Se entiende la consulta? ¿alguien sabe si es posible? Muchas gracias!
25/06/2016 a las 11:58 am
Perfecto. sólo una pregunta. si necesito ejecutar una consulta que contiene parámetros cómo sería?
Gracias.
13/06/2017 a las 11:55 pm
Hola buena noche y como seria si en lugar de ejecutar una consulta busco ejecutar 3 macros de Access??
Agradeceria el apoyo ya que llevo bastante con este tema