Acceso rápido

Abrir un archivo de Access desde Excel con VBA: guía práctica

noviembre 4, 2026 Tuto Excel 14 min read
Abrir un archivo de Access desde Excel con VBA: guía práctica

Cuando una hoja de cálculo empieza a guardar miles de pedidos, clientes y direcciones, llega un punto en que copiar y pegar deja de servir. VBA es el puente que une Excel y Access: desde una macro puedes abrir una base, escribir registros nuevos, traer tablas enteras o ejecutar una consulta SQL con parámetros. Al terminar este tutorial verás cómo hacer ese viaje de ida y vuelta en ambas direcciones: de Excel a Access y de Access a Excel, todo desde el editor de Visual Basic que ya trae tu Excel.

Funciona en Excel para Microsoft 365, 2024, 2021, 2019 y 2016 para Windows. Access solo existe para Windows, así que estas macros no corren en Mac ni en Excel para la web. Si no tienes Access instalado, el código de más adelante abre bases creadas con el motor Access Database Engine, que también es de Microsoft.

Qué puede hacer VBA entre Excel y Access

Imagina el inventario de un almacén: empieza en una hoja de Excel con productos y precios, pero al sumar pedidos, proveedores y ubicaciones las columnas se multiplican y empiezan a faltar relaciones. Access aguanta muchos más registros y, sobre todo, permite consultas SQL entre tablas. Cuando tocas datos guardados en Access desde Excel, copiar y pegar deja tres huellas que VBA evita: solo trae lo visible, pierde los formatos y se corta si la tabla pasa de unos miles de filas.

La macro abre la base de Access desde Excel, lee la tabla Productos y la pega con sus encabezados. Al revés, escribe los nuevos pedidos que entran en una hoja de Excel directamente sobre la tabla Pedidos de Access. Cuando se hace a mano, cada paso es un riesgo; cuando lo hace VBA, se repite igual cada vez.

Nota: En Excel configurado con coma decimal (México, Estados Unidos) los argumentos de las funciones se separan con coma: =SI(A1>10,"Alto","Bajo"). Aquí usamos punto y coma por la configuración española.

El modelo de objetos de Excel y Access en VBA

Excel expone sus piezas como una escalera que va de lo más grande a lo más pequeño: Application es el propio Excel, Workbooks la colección de libros abiertos, Worksheets las hojas de un libro y Worksheet una hoja en concreto. Sobre ella, un Range o una Cells(fila, columna) apunta a una celda o a un bloque. Access tiene una escalera parecida: Application abre Access, DBEngine es el motor de datos, CurrentData.Project.DB es la base abierta y TableDefs la colección de tablas.

Acceso a la base de Access

DoCmd ejecuta acciones (abrir formularios, informes, compactar). Recordset recorre filas reales de una tabla o del resultado de una consulta SQL. Se crea con CurrentDb.OpenRecordset("Clientes"), se avanza con .MoveNext y se cierra con .Close. DBEngine.OpenDatabase("C:\Datos\Tienda.accdb") abre la base desde fuera, sin lanzar Access.

Objeto Dónde está Para qué sirve
Range("A1") Excel Lee o escribe el valor de una celda
Worksheets("Hoja1") Excel Apunta a una hoja por su nombre
DBEngine.OpenDatabase Access Abre un archivo .accdb o .mdb
CurrentDb.OpenRecordset Access Devuelve filas de una tabla o consulta
DoCmd.OpenReport Access Abre un informe con nombre
QueryDef Access Ejecuta una consulta SQL guardada o en texto

Propiedades y métodos: los adjetivos y verbos del modelo

Una propiedad describe cómo es el objeto y un método ejecuta una acción. Range("A1").Value = "Hola" es una propiedad: cambia el contenido de la celda. DoCmd.OpenReport "Ventas" es un método: le pide a Access que abra el informe. La regla práctica: lo que lleva paréntesis es método, lo que no lleva paréntesis es propiedad.

Sub PropiedadesYMetodos()
    ' Propiedad: cambiar el valor de A1
    Range("A1").Value = "Hola"
    ' Método: dar formato en negrita
    Range("A1").Font.Bold = True
    ' Método: lanzar una macro de Access
    DoCmd.OpenReport "VentasMensuales", acViewPreview
End Sub

Activar la pestaña Programador y abrir el editor de VBA

La pestaña Programador viene oculta por defecto. La activas una vez y queda para siempre en este equipo.

  1. Abre Excel y ve a Archivo > Opciones.
  2. En la ventana de Opciones, elige Personalizar cinta de opciones.
  3. En la columna de la derecha (Pestañas principales), marca la casilla Programador.
  4. Pulsa Aceptar. La pestaña Programador aparece a la derecha de Vista.
  5. Pulsa Alt+F11 para abrir el editor de Visual Basic.
  6. En el editor, ve a Insertar > Módulo para crear un módulo en blanco donde escribirás el código.
ArchivoOpcionesPersonalizar cinta de opciones

Grabar la primera macro y leer lo que VBA escribe

La grabadora de macros es la mejor profesora: hace lo que tú haces y deja el código escrito en VBA.

  1. En la hoja Inventario, escribe en A1 Producto, en B1 Precio, en C1 Cantidad.
  2. Rellena A2 con Cuaderno, B2 con 3,20, C2 con 5; A3 con Bolígrafo, B3 con 0,90, C3 con 12; A4 con Carpeta, B4 con 2,50, C4 con 8; A5 con Grapa, B5 con 1,10, C5 con 20; A6 con Pegamento, B6 con 2,75, C6 con 4.
  3. Ve a Programador > Código > Grabar macro. Deja el nombre TotalPorLinea y almacénalo en Este libro.
  4. Pulsa Aceptar.
  5. Selecciona D1 y escribe Total. Pulsa Intro.
  6. Selecciona D2 y escribe =B2*C2 en la barra de fórmulas. Pulsa Intro.
  7. Copia D2, pega en D3:D6.
  8. Vuelve a Programador > Código > Detener grabación.
  9. Pulsa Alt+F11, abre el módulo Módulo1 y mira el código que escribió la grabadora.

Sub TotalPorLinea()
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "Total"
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"
    Range("D2").Select
    Selection.Copy
    Range("D3:D6").Select
    ActiveSheet.Paste
End Sub

Como ves, la grabadora escribe FormulaR1C1 con la fórmula en inglés y referencias estilo R1C1: RC[-2] son dos columnas a la izquierda, RC[-1] una. Esa misma fórmula en estilo A1 sería =B2*C2.

Comprueba: La columna D muestra 16,00; 10,80; 20,00; 22,00 y 11,00 en D2:D6.

Cómo se guarda un libro con macros

El libro donde guardas macros no puede guardarse como .xlsx: Excel las borra al guardar. Hay que usar el formato Libro de Excel habilitado para macros (.xlsm).

  1. Pulsa F12 (Guardar como).
  2. En Tipo, elige *Libro de Excel habilitado para macros (.xlsm)**.
  3. Pulsa Guardar.
Nota: Si guardas en .xlsx y vuelves a abrir, las macros han desaparecido sin aviso.

Llevar datos de Excel a Access con VBA

Ahora la hoja Clientes del inventario va a alimentar la tabla Clientes de Access. El código abre la base y graba fila a fila.

A1fx**Nombre**
A B C
1 Nombre Email Ciudad
2 Ana ana@correo.com Lima
3 Beto beto@correo.com Cusco
4 Carla carla@correo.com Arequipa
5 David david@correo.com Lima
6 Eva eva@correo.com Trujillo
Clientes
  1. Crea una base llamada Tienda.accdb en C:\Datos\ y, dentro, una tabla Clientes con campos Nombre (texto), Email (texto) y Ciudad (texto).
  2. En Excel, abre Alt+F11 y crea un módulo llamado ModClientes.
  3. Pega el código siguiente.
  4. Ejecuta con Alt+F8, elige SubirClientes y pulsa Ejecutar.

Sub SubirClientes()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim fila As Long
    Set db = DBEngine.OpenDatabase("C:\Datos\Tienda.accdb")
    Set rs = db.OpenRecordset("Clientes")
    fila = 2
    Do While Worksheets("Clientes").Cells(fila, 1).Value <> ""
        rs.AddNew
        rs!Nombre = Worksheets("Clientes").Cells(fila, 1).Value
        rs!Email = Worksheets("Clientes").Cells(fila, 2).Value
        rs!Ciudad = Worksheets("Clientes").Cells(fila, 3).Value
        rs.Update
        fila = fila + 1
    Loop
    rs.Close
    db.Close
    MsgBox "Subidos " & fila - 2 & " clientes."
End Sub
Comprueba: Al abrir la base Tienda.accdb, la tabla Clientes tiene cinco registros con los mismos datos que la hoja.

Las dos referencias que necesitas marcar

DAO no está marcado por defecto. Sin esas dos referencias, el código no compila.

  1. En el editor de VBA, abre Herramientas > Referencias.
  2. Marca Microsoft Office x.x Access database engine Object Library.
  3. Marca Microsoft Scripting Runtime.
  4. Pulsa Aceptar.
HerramientasReferencias

Cerrar el Recordset y compactar la base al terminar

.Close libera memoria y .Update guarda el registro. Olvidarse de cerrar deja el archivo bloqueado hasta que Access se cierra por completo.

Nota: Access solo existe para Windows, así que esta macro no corre en Mac ni en Excel para la web.

Traer una tabla de Access a Excel con VBA

Ahora el camino inverso: la tabla Pedidos de Access cae en la hoja Pedidos de un Excel nuevo, ya con encabezados.

A1fx**IdPedido**
A B C D
1 IdPedido Fecha IdCliente Importe
2 1 2026-01-15 1 150,00
3 2 2026-01-18 2 90,00
4 3 2026-01-22 3 230,00
5 4 2026-02-04 1 45,00
6 5 2026-02-10 4 320,00
Pedidos

Sub TraerPedidos()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim ws As Worksheet
    Dim i As Long
    Set db = DBEngine.OpenDatabase("C:\Datos\Tienda.accdb")
    Set rs = db.OpenRecordset("Pedidos")
    Set ws = Worksheets.Add
    ws.Name = "Pedidos"
    ws.Range("A1").Value = "IdPedido"
    ws.Range("B1").Value = "Fecha"
    ws.Range("C1").Value = "IdCliente"
    ws.Range("D1").Value = "Importe"
    ws.Range("A1:D1").Font.Bold = True
    i = 2
    Do While Not rs.EOF
        ws.Cells(i, 1).Value = rs!IdPedido
        ws.Cells(i, 2).Value = rs!Fecha
        ws.Cells(i, 3).Value = rs!IdCliente
        ws.Cells(i, 4).Value = rs!Importe
        rs.MoveNext
        i = i + 1
    Loop
    rs.Close
    db.Close
End Sub
Comprueba: Aparece una hoja Pedidos con cinco filas bajo los encabezados en negrita.

Comparar con la ruta sin código

Cuando la tabla no necesita lógica ni transformación, la ruta sin código es más rápida.

  1. Ve a Datos > Obtener datos > Desde base de datos > Desde Microsoft Access.
  2. Elige Tienda.accdb y la tabla Pedidos.
  3. Pulsa Cargar.
DatosObtener datosDesde base de datosDesde Microsoft Access

Power Query trae los datos y permite refrescarlos al cambiar la base. VBA conviene cuando hay lógica (por ejemplo, aplicar tipos, saltarse filas o disparar cálculos fila a fila) o cuando la exportación debe quedar dentro de un proceso automático.

Ejecutar consultas de Access desde Excel

La tabla Clientes y Pedidos se pueden cruzar con SQL. La consulta siguiente devuelve cuánto ha facturado cada ciudad.

Sub TotalPorCiudad()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim ws As Worksheet
    Dim sql As String
    Set db = DBEngine.OpenDatabase("C:\Datos\Tienda.accdb")
    sql = "SELECT Clientes.Ciudad, Sum(Pedidos.Importe) AS Total " & _
          "FROM Clientes INNER JOIN Pedidos " & _
          "ON Clientes.IdCliente = Pedidos.IdCliente " & _
          "GROUP BY Clientes.Ciudad"
    Set rs = db.OpenRecordset(sql)
    Set ws = Worksheets.Add
    ws.Name = "Totales"
    ws.Range("A1").Value = "Ciudad"
    ws.Range("B1").Value = "Total"
    ws.Range("A1:B1").Font.Bold = True
    ws.Range("A2").CopyFromRecordset rs
    rs.Close
    db.Close
End Sub

Ciudad    Total
Lima      195,00
Cusco     90,00
Arequipa  230,00
Trujillo  320,00
Comprueba: La hoja Totales muestra una fila por ciudad con el importe sumado.

Pasar parámetros a la consulta

VBA puede cambiar una parte de la SQL justo antes de ejecutarla. El año se lee de la celda B1 del Excel y se mete con & dentro del texto SQL.

Sub TotalPorAnio()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim sql As String
    Dim anio As Long
    Set db = DBEngine.OpenDatabase("C:\Datos\Tienda.accdb")
    anio = Worksheets("Parametros").Range("B1").Value
    sql = "SELECT Clientes.Ciudad, Sum(Pedidos.Importe) AS Total " & _
          "FROM Clientes INNER JOIN Pedidos " & _
          "ON Clientes.IdCliente = Pedidos.IdCliente " & _
          "WHERE Year(Pedidos.Fecha) = " & anio & " " & _
          "GROUP BY Clientes.Ciudad"
    Set rs = db.OpenRecordset(sql)
    Worksheets("TotalesAnio").Range("A2").CopyFromRecordset rs
    rs.Close
    db.Close
End Sub
Comprueba: Cambia B1 a 2025 y vuelve a ejecutar: solo aparecen los pedidos de ese año.

Los errores que aparecen al cruzar Excel y Access

Error 1004 al asignar una fórmula en español a .Formula

Si escribes Range("D2").Formula = "=SUMA(A2:A10)" en un Excel en español, VBA responde con error 1004. La solución es usar .FormulaLocal (acepta español y punto y coma) o pasar la fórmula a inglés: Range("D2").Formula = "=SUM(A2:A10)".

Error 3705 al no cerrar el Recordset

Cuando una macro termina y deja un Recordset abierto, la siguiente ejecución devuelve el error 3705: La operación no está permitida en este tipo de objeto. La solución es llamar siempre a rs.Close y db.Close antes de End Sub.

"No se encuentra el proveedor" al abrir la base

VBA no encuentra el motor de Access Database Engine cuando falta la referencia. Marca Microsoft Office x.x Access database engine Object Library en Herramientas > Referencias. Si usas Access 2016 o superior y Office de 32 bits, instala el motor de 32 bits; si es de 64 bits, el de 64 bits.

Por qué a veces VBA "no hace" a Excel

Si guardas el libro en .xlsx, las macros desaparecen la próxima vez que abras el archivo. Vuelve a guardarlo como .xlsm. Si la macro corre desde un archivo bajado de internet, Excel bloquea las macros por seguridad: desbloquea el archivo en el Explorador de Windows, en Propiedades > Desbloquear. Y recuerda: Access solo existe para Windows, así que ningún código con DBEngine corre en Mac ni en Excel para la web.

Lo que ya sabes hacer con Excel, Access y VBA

  • Abrir una base de Access desde Excel con DBEngine.OpenDatabase.
  • Recorrer una tabla con Recordset, leer sus campos y volcarlos a una hoja.
  • Escribir registros nuevos con .AddNew y .Update fila a fila.
  • Ejecutar una consulta SQL con OpenRecordset y volcar el resultado con CopyFromRecordset.
  • Pasar parámetros del Excel a la SQL concatenando con &.

Siguiente paso: graba tu propio proceso (por ejemplo, el cierre mensual) con la grabadora de macros, mira el código que escribe y reemplaza las celdas concretas por variables VBA.

Dudas al conectar Excel y Access con VBA

1. ¿Dónde consultar la documentación oficial de VBA para Excel?

La referencia completa de VBA está en learn.microsoft.com, dentro de la sección Office VBA reference. Allí encontrarás el modelo de objetos de Excel (Workbook, Worksheet, Range), los métodos y propiedades de cada uno, y ejemplos copiables. La ayuda en español está en support.microsoft.com/es-es/office, aunque algunos temas técnicos solo se publican en inglés.

2. ¿Se puede descargar VBA para Excel por separado?

No, VBA viene integrado en las versiones de escritorio de Excel desde 1994 y no se descarga aparte. Lo que sí puedes instalar es el Editor de Visual Basic: se abre con Alt+F11 o desde Programador > Código > Visual Basic. Asegúrate de que la pestaña Programador esté visible activándola en Archivo > Opciones > Personalizar cinta de opciones.

3. ¿Hay alguna forma sencilla de empezar con VBA en Excel sin experiencia previa?

El camino más corto es grabar una macro: en Programador > Código > Grabar macro, haz las acciones sobre la hoja y detén la grabación. Después abre el editor con Alt+F11 y observa el código generado para entender la estructura. A partir de ahí, modificar y crear macros propias se vuelve mucho más intuitivo.

4. ¿Qué necesita un curso básico de VBA para ser útil?

Un buen curso introductorio cubre el editor (Alt+F11), las variables, los bucles For Each y For Next, y los condicionales If…Then. También debe enseñar a trabajar con rangos y a abrir otros libros con Workbooks.Open, que es justo lo necesario para lanzar un archivo de Access desde Excel.

5. ¿Existe un compilador de VBA para crear archivos .exe?

No existe un compilador oficial de VBA, y Microsoft no ofrece uno porque VBA se ejecuta dentro de la aplicación anfitrión. Lo que sí se hace es proteger el código con contraseña desde el editor o convertirlo a un complemento .xlam, que se distribuye como archivo normal de Excel, no como ejecutable.

6. ¿Qué son las macros en Excel y para qué sirven?

Una macro es una secuencia de acciones grabada o escrita en VBA que Excel ejecuta automáticamente al dispararla. Sirven para automatizar tareas repetitivas como dar formato, copiar datos entre hojas o, en este caso, abrir un archivo de Access. Se crean con Programador > Código > Grabar macro o directamente en el editor con Alt+F11.

7. ¿WPS Office tiene su propia biblioteca de soporte para VBA?

WPS Office incluye compatibilidad básica con macros en su versión para Windows, pero su motor es propio y no idéntico al de Excel. Muchas funciones VBA estándar funcionan, aunque algunas referencias y métodos del modelo de objetos de Excel pueden no estar disponibles. Para macros que abran Access, conviene probar antes el código en WPS o usar directamente Microsoft Excel.

8. ¿Cómo mostrar la pestaña Programador en Excel?

Haz clic derecho en cualquier parte de la cinta de opciones y elige Personalizar cinta de opciones. En la columna derecha, marca la casilla Desarrollador (aparece como Programador en algunas versiones) y pulsa Aceptar. La pestaña aparecerá a la derecha de Vista y desde ahí accedes al editor de VBA, las macros y los controles de formulario.

Fuentes

  1. MicrosoftLAMBDA — documentación oficialconsultado el 13/10/2026
  2. MicrosoftRange.Formula, FormulaLocal, FormulaR1C1 y FormulaR1C1Local — documentación oficialconsultado el 13/10/2026
  3. MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 13/10/2026
  4. MicrosoftExcel y Access — documentación oficialconsultado el 13/10/2026
  5. MicrosoftHIPERVINCULO — documentación oficialconsultado el 13/10/2026