Como pasar pasar un parámetro a una consulta de access desde excel.

Solicito a quien pueda ayudarme, que me indique como pasar un parámetro desde excel a una consulta de access ; la consulta que se genera en access PIDE el parámetro: el nit por ejemplo.

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 títulos a las columnas

'Paso 2: Identificar la base de datos y la consulta.

'Se identifica la base de datos que contiene la consulta requerida así como la consulta que correrá el programa.

'Al haberle asignado a QueryDef una consulta le permite al usuario abrir la consulta en la memoria.

'Nótese que para ejecutar la macro se debe colocar la ruta correspondiente del archivo en access para el cual se desea obtener la consulta, así como también el nombre de la consulta.

Set MyDatabase = DBEngine.OpenDatabase _

("E:\CUENTASXC\CTASXC.accdb")

Set MyQueryDef = MyDatabase.QueryDefs("PAGOS 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("HOJA1").Select

ActiveSheet.Range("A6:K1000000").ClearContents

'Paso 5: Se copian los datos a Excel, para este caso a la celda "A6"

ActiveSheet.Range("A7").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

1

1 Respuesta

276.840 pts. Access... ser o no ser. Esa es la cuestión

El objeto querydef tiene la propiedad parameters, y ahí puedes configurar el valor del parámetro de la manera que creas más oportuna.

Supongamos que, en tu Access, el parámetro de tu consulta es [Introduzca el nit]

Supongamos también que, en la celda A2, tienes el nit por el que quieres filtrar.

Entonces, en tu código, tienes que añadir el parámetro de la manera siguiente:

'Código anterior...
Set MyQueryDef = MyDatabase.QueryDefs("PAGOS Consulta") 'Esto ya lo tenías
MyQueryDef.Parameters("[Introduzca el nit]") = ActiveSheet.Range("A2").Value 'Esta es la definición del parámetro
Set MyRecordset = MyQueryDef.OpenRecordset 'Esto ya lo tenías
'Código posterior...

Por otra parte, si me permites el comentario, ese código podría darte algún problemilla porque no estás destruyendo las instancias de los objetos que has creado (el objeto dao.recordset, el objeto dao.querydef y el objeto dao.database). Mi recomendación sería que cerraras el recordset y eliminaras los tres objetos, con lo cual, además, vas a liberar memoria. Eso se haría de la siguiente manera, antes del End Sub:

'Código anterior
Next i 'esto ya lo tenías
'Cerramos el recordset y eliminamos instancias de objetos.
MyRecordset.Close
Set MyRecordset = Nothing
Set MyQueryDef = Nothing
Set MyDatabase = Nothing
End Sub

Un saludo. Neckkito (http://bit.ly/NckAccess / http://bit.ly/ForoNkSv)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas