Вы находитесь на странице: 1из 3

14/2/2018 AÑADIR REGISTROS EN ACCESS DESDE EXCEL CON VBA | EXCEL SIGNUM

AÑADIR REGISTROS EN
ACCESS DESDE EXCEL
CON VBA
Publicado el 8 julio, 2016 por Segu

Desde Excel podemos interactuar con Access, de hecho, podemos agregar nuevos registros,
actualizarlos o eliminarlos. La forma de hacerlo es mediante ADO y trabajando con SQL o con
Recordset.

Hace unos meses publiqué una entrada titulada: EXPORTAR DATOS DE EXCEL A ACCESS
MEDIANTE ADO. Aquí hago referencia a posibilidad exportar una tabla de Excel a Access, pero no
especificando nuevos registros, sino especificando nueva tabla, es decir, lo que hago realmente es
crear una tabla de Access desde Excel (en bloque) y luego en el momento de actualizarla, borro la
tabla de la base de datos de Access y vuelvo a transferir la de Excel (completa).

Sin embargo, hoy lo haremos de otra forma y nos centraremos en la posibilidad de insertar los
nuevos registros especificándolos desde una hoja Excel.

Antes de comenzar, una aclaración, como todos sabéis cuando creamos nuestras bases de datos en
Access o importamos tablas, existe la opción de permitir que Access agregue una clave principal:

Para este ejemplo lo haremos de esta forma, permitiendo que Access agregue un ID a cada registro,
más adelante os explicaré la importancia de hacerlo de esta forma.

Ahora que hemos creado (en este caso importado la tabla de Excel) nos encontramos con una base
de datos de 198 registros (que se corresponden con los empleados de unos grandes almacenes):

https://excelsignum.com/2016/07/08/anadir-registros-en-access-desde-excel-con-vba/ 1/3
14/2/2018 AÑADIR REGISTROS EN ACCESS DESDE EXCEL CON VBA | EXCEL SIGNUM

Pues bien, imaginad que queremos incluir a 3 empleados en la tabla, para ello abrimos nuestra hoja
Excel y detallamos los empleados y campos que queremos incluir:

Como podéis observar hemos incluido a los tres empleados y hemos añadido los ID’s que le
corresponden a cada uno de ellos. Ahora incluimos esta macro en un módulo estándar:

Sub InsertAccess()
Dim conAccess As ADODB.Connection
Dim Origen As String, Destino As String
Dim conExcel As String, obSQL As String
'Definimos las tablas de Access y Excel con las que vamos a
trabajar
Destino = "[TRABAJADORES]"
Origen = "[EMPLEADOS$]"
'Cadena de conexión a nuestro archivo de Excel
conExcel = "[Excel 8.0;HDR=Yes;DATABASE=F:\COMPAÑIA.xls]." &
https://excelsignum.com/2016/07/08/anadir-registros-en-access-desde-excel-con-vba/ 2/3
14/2/2018 AÑADIR REGISTROS EN ACCESS DESDE EXCEL CON VBA | EXCEL SIGNUM

Origen
'Sentencia SQL para incluir nuevos registros no repeditos
obSQL = "INSERT INTO " & Destino & " SELECT * FROM " & conExcel
'Cadena de conexión Access
Set conAccess = New ADODB.Connection
With conAccess
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" &
"Data Source=F:\EMPRESA.accdb;"
.Open
.Execute obSQL
.Close
End With
End Sub

En la macro debéis especificar la ruta de ambos archivos (Excel y Access) en vuestro equipo y
otorgar nombre a cada una de las tablas. (En la macro lo indico en las líneas comentadas)

Una vez que ejecutéis el proceso, la macro incluirá los tres empleados en la base de Access:

La importancia de dejar que Access cree una clave principal (Id) es que si intentamos incluir algún
nuevo registro con un Id repetido, la macro mostrará un error y no cargará los datos. Así evitamos
tener registros duplicados.

Si no queremos este control y deseamos introducir registros que puedan ser o estar duplicados,
simplemente debemos elegir “sin clave principal”.

https://excelsignum.com/2016/07/08/anadir-registros-en-access-desde-excel-con-vba/ 3/3

Вам также может понравиться