Hola
Tengo una aplicación en Access. En un momento dado, me genero dinámicamente una consulta porque depende de varios parámetros. Algo así como:
txtSQL = "SELECT * FROM tablas WHERE blablabla"
set rs = currentdb.openrecordset(txtSQL, dbopensnapshot) -> abro la consulta en modo solo lectura
El caso es que necesito enviar estos datos a una hoja Excel (que no existe). Sé que eso lo puedo hacer muy fácilmente con la función:
docmd.TransferSpreadSheet acExport, acSpreadsheetTypeExcel12Xml, "Nombre", "ruta\archivo", True
Esto es fácil cuando "Nombre" es un nombre definido. Es decir, cuando tengo consultas guardadas, o tablas, simplemente pongo ahí su nombre y funciona. Pero cuando me he creado la consulta "on the fly", esto no es así porque el nombre de la consulta es precisamente todo su código SQL, y el método TransferSpreadSheet me casca un error de "el nombre no cumple los parámetros para nombres de Access" o algo parecido.
¿Hay alguna manera sencilla de enviar los datos de mi consulta a una hoja Excel sin tener que ir leyendo uno a uno y copiándolos en las celdas uno a uno?
Dicho de otro modo: ¿Alguna manera sin tener que activar la referencia a objetos Excel en el VBE?
Un saludo
Si es que no hay como preguntar aquí para obtener una respuesta... 5 días dándole vueltas y buscando por internet, y no se me había ocurrido lo más obvio: crearme una querydef!!
For Each rs In CurrentDb.QueryDefs
If rs.Name = "Export" Then
CurrentDb.QueryDefs.Delete "Export"
Exit For
End If
Next
Set rs = CurrentDb.CreateQueryDef("Export")
With rs
.SQL = txtSQL
.Close
End With
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Export", Me.txtSave.Value, True