Exportar consulta parametrizada a Excel

2 envíos / 0 nuevos
Último envío
Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Exportar consulta parametrizada a Excel

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

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Si es que no hay como

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

Es decir, primero elimino la query que hubiera guardada previamente, si existe. Después me creo una query que se llama "Export", y le asigno el código SQL que definí previamente. Por último, la exporto a Excel.
 
¿Mejorable? Claro. De entrada, podría no generarme la query dinámicamente, pero a día de hoy es lo que menos tiempo me quita.
 
Gracias por las molestias. Un saludo ;)