Exportar de Access a Excel con VBA

Estándar

Si queremos exportar una consulta de Access directamente a Excel se puede hacer con este comando desde VBA:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, “NOMBRE_CONSULTA”, nombre_ARCHIVO, True

DoCmd.TransferSpreadsheet acExport, esta es la orden para exportar a una hoja de calculo.

acSpreadsheetTypeExcel9 , esto identifica la version de excel que vamos a usar para hacer la exportación, el numero final dependera de la version de excel que tengamos instalada en nuestro ordenador.

El “NOMBRE_CONSULTA” sera el nombre de la query que hayamos diseñado previamente en el panel de base de datos de Access.

El nombre_archivo sera la ruta donde queramos guardar el xls, hay que especificar la ruta completa “C:\informes\informe1.xls” , el nombre normalmente se crea con parámetros como el nombre de consulta + la fecha en la cual se hace la exportación.

Actualización: para abrir el archivo resultante podemos usar esta orden (para el caso de Office 2003): 

Shell GetProgFilesPath & “\Microsoft Office\OFFICE11\EXCEL.EXE” & ” ” & nombre_archivo

Te ayudamos a integrar esta solución en tu aplicación de Access[ click aquí]

Programacion de aplicaciones access

27 comentarios en “Exportar de Access a Excel con VBA

    • Shell GetProgFilesPath & “\Microsoft Office\OFFICE11\EXCEL.EXE” & ” ” & nombre_archivo

      La ruta del ejecutable de Excel dependera de la version instalada. El nombre_archivo debe llevar la ruta completa donde se guardo.

    • La verdad es que no conocemos todas las opciones del comando de exportación, a priori diría que no.
      En todo caso puedes hacer una macro que elimine la primera linea en excel,pero no le veria la utilidad, ya que para ordenar los resultados es muy util saber que columna se esta leyendo, o para hacer graficas.

  1. Jose Luis

    Intento exportar esta consulta, pero me envia el error 311, diciendo que no encuentra el objeto que me asegure que la ruta es correcta y el nombre también, ya lo cheque, si existe, la ruta esta correcta pero continua con el mismo mensaje.

    DoCmd.TransferSpreadsheet acExport, cSpreadsheetTypeExcel2003“CONSCUAD01”, “D:\Usuarios\Trabajo\PADRON\CUADRO.xls”, True

    • La sintaxis de la orden no tiene pinta de estar bien, asi tal cual me parece que le falta una coma entre el tipo de archivo y el nombre de la consulta

      DoCmd.TransferSpreadsheet acExport, cSpreadsheetTypeExcel2003“CONSCUAD01”, “D:\Usuarios\Trabajo\PADRON\CUADRO.xls”, True

      Mira la coma despues de cSpreadsheetTypeExcel2003
      DoCmd.TransferSpreadsheet acExport, cSpreadsheetTypeExcel2003,“CONSCUAD01”, “D:\Usuarios\Trabajo\PADRON\CUADRO.xls”, True

  2. Jose

    Hola,
    yo estoy intentando exportar un informe de access a excel. He generado el siguiente código:
    Private Sub Comando32_Click()
    DoCmd.OutputTo acOutputReport, “InfInterface”, _
    “Microsoft Excel (*.xls)”, “infAccess.xls”, True
    End Sub

    EL PROBLEMA es que cuando me exporta a una hoja de cálculo, me lleva los datos de la tabla vinculada a excel y yo realmente quiero que me lleve sólo el informe, con los campos y estrucutra que he diseñado en él…

    Me podéis ayudar.Gracias de antemano

  3. Jesus

    Al fichero de salida excel.
    ¿se le puede dar formato de salida?
    Es decir, que el tamaño de las columnas se adapte al texto que contiene y poner en negrita o con otro fondo de celda el título de las columnas

  4. Ferran

    Utilizando la función indicada me aparece siempre un error “3434 en tiempo de ejecución. No se puede expandir el intervalo con nombre”. A que se debe? Gracias

  5. Giovanny

    Como puedo pasar parámetros a una consulta en Access.

    Ej. tengo una consulta, pero quiero filtrarla dinámicamente desde un formulario por los campos fecha de inicio y fecha final

    • En el diseño de la consulta, en el campo que deseas filtrar haces click en criterios, luego en el wizard y ahi te saldra el generador de expresiones.

      En este generador de expresiones, buscas el formulario, luego el input y luego haces doble click en el valor, de esta forma te sale la ruta del objeto por el que se va a filtrar ese campo.

      Como filtrar en Access una consulta por el valor de un formulario

    • Si las consultas salen de una base de datos SQL con las tablas en Access puedes probar este codigo:

      Option Compare Database
      Option Explicit

      Sub ExportToXlsx()
      Dim cdb As DAO.Database, qdf As DAO.QueryDef
      Set cdb = CurrentDb

      Const xlsxPath = "C:\Users\Gord\Desktop\archivo_excel.xlsx"

      ' create .xlsx file if it doesn't already exist, and add the first worksheet
      Set qdf = cdb.CreateQueryDef("hoja1", _
      "SELECT * FROM tabla1")
      Set qdf = Nothing
      DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "hoja1", xlsxPath, True
      DoCmd.DeleteObject acQuery, "hoja1"

      ' file exists now, so this will add a second worksheet to the file
      Set qdf = cdb.CreateQueryDef("hoja2", _
      "SELECT * FROM tabla2")
      Set qdf = Nothing
      DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "hoja2", xlsxPath, True
      DoCmd.DeleteObject acQuery, "hoja2"

      Set cdb = Nothing
      End Sub

  6. Gustavo Rivas

    Cómo puedo solo pasar el valor de una variable que esta en VBA de access a una celda de excel especifica, de modo que tebgo varias variables y las quiero en celdas muy distintas unas de otras.

    • Desde Access no conozco ningun metodo con el que puedas realizar esa operación. Si quieres editar celdas concretas de una hoja de Excel tienes 2 opciones: Desde el propio VBA de Excel (puedes leer una tabla de access o sql server desde el propio codigo de excel) o a través de una aplicacion .Net

Deja un comentario

Tu dirección de correo electrónico no será publicada.