EXPORTAR DATOS DE EXCEL A ACCESS MEDIANTE ADO

Hace unos días recibí una consulta donde me solicitaban ayuda para exportar datos desde Excel a Access. El lector había consultado la entrada CONECTAR BASE DE DATOS DE ACCESS (ACCDB) CON EXCEL UTILIZANDO HERRAMIENTA OLEBD donde se explica como conectar y traernos a nuestro Excel una tabla o una consulta desde Access.

Pues bien, me pareció bastante interesante y también tenía ganas de trabajar un poco con ADO y SQL. Así que hoy trabajaremos esta situación, y como siempre vamos a poner un ejemplo:

Imaginad que trabajamos en unos grandes almacenes y nos entregan un archivo Excel con el detalle de empleados, nombres, idiomas, fechas de nacimiento, etc …, y nosotros, que trabajamos habitualmente con Access, cada vez que nos envían la información tenemos que guardarnos la misma tabla una y otra vez para después importarla desde Access y realizar nuestros informes. Esta situación puede ser muy habitual, sobre todo para los usuarios de Access que no lo tienen tan fácil para encontrar colaboradores que trabajen con este programa.

* Si necesitáis crear bases de datos con nombres y apellidos podéis ver esta entrada donde os explico como lo podéis hacer: pinchad aquí

Siguiendo con el ejemplo, el archivo Excel que nos envían se llama “COMPAÑÍA” y la pestaña de la hoja donde tenemos la información se denomina “EMPLEADOS”:

EXPORTAR DATOS DE EXCEL A ACCESS MEDIANTE ADO_1

Ahora que tenemos estos datos, debemos exportarlos a Access y para ello, vamos a trabajar con la siguiente macro:

Sub EXPORT_ACCESS()
'Definimos las variables a utilizar
Dim ConAccess As ADODB.Connection
Dim ConExcel As String, obSQL As String
Dim Origen As String, Destino As String
'Establecemos conexion con la base de datos de Access que hemos creado (EMPRESA)
'debéis verificar la ruta a vuestra base de datos.
Set ConAccess = New ADODB.Connection
ConAccess.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=F:\EMPRESA.accdb;"
'Eliminamos la tabla TRABAJADORES y verificamos que si no existe no salte un error (Control)
On Error GoTo Control
obSQL = "DROP TABLE [TRABAJADORES]"
ConAccess.Execute obSQL
Control:
'Establacemos conexion con el archivo de Excel, desde donde vamos a exportar la tabla
'Debéis verificar la ruta a vuestro archivo excel y respetar las comillas "dobles" y "simples"
ConExcel = "'F:\COMPAÑIA.xls' 'Excel 8.0;HDR=Yes;'"
'Definimos el nombre de las tablas:
'Origen será la tabla de Excel
'Destino será la tabla de Access
Origen = "[EMPLEADOS$]"
Destino = "[TRABAJADORES]"
'Importamos la tabla a Access con los nuevos cambios que hayamos realizado en Excel
obSQL = "SELECT * INTO " & Destino & " FROM " & Origen & " IN " & ConExcel
ConAccess.Execute obSQL
ConAccess.Close
End Sub

Aunque ya explico el funcionamiento de la macro en los comentarios en verde. Vamos a incidir en algunas partes del código.

Después de insertar la macro y antes de ejecutarla debéis crear una base de datos (vacía), en este ejemplo la denomino “EMPRESA” y luego definir el nombre de la tabla que creará la macro con los datos importados de Excel, en este caso, nombro la tabla como [TRABAJADORES].

Para poder actualizar la tabla tantas veces como necesitemos, es necesario que por cada vez que se importemos los datos, realicemos: o bien una consulta de actualización, o como en este caso, he optado por eliminar directamente la tabla y volver a importarla, de esta forma actualizaremos toda la información, con este código conseguimos el borrado:

On Error GoTo Control
obSQL = "DROP TABLE [TRABAJADORES]"
ConAccess.Execute obSQL
Control:

El control del error es necesario, dado que si en la base no tenéis ninguna tabla que se llame TRABAJADORES, se generará un error por no encontrar la tabla, así lo controlamos y lo obviamos.

En caso de que solamente queráis ir incluyendo tablas, por ejemplo, por cada mes una diferente, tendríais que eliminar el código que borra la tabla, y cada vez que importaseis renombrar la tabla de Access Destino = “[la tabla x]”

Ni que decir tiene que antes de ejecutar la macro, debéis establecer las rutas correctas en vuestro equipo, en el código lo marco en rojo. En mi caso están en la unidad “D” (un pendrive).

Os muestro la base de datos de Access para que veáis el resultado:

EXPORTAR DATOS DE EXCEL A ACCESS MEDIANTE ADO_2

Por último, para la macro funcione, una vez insertada la macro nuestro editor de VBA debéis marcar en la biblioteca de referencias: Microsoft ActiveX Data Objects 2.8 Library

EXPORTAR DATOS DE EXCEL A ACCESS MEDIANTE ADO_3

Sin esta referencia, la macro no funcionará, ¡es imprescindible que la marquéis!

Ahora os dejo el enlace a Drive, en wordpress no se permite alojar archivos de Access 😦
pero google es una buena alternativa para solucionar el problema.

Espero que os sea de utilidad!

Descarga el archivo de ejemplo pulsando en: EXPORTAR DATOS DE EXCEL A ACCESS MEDIANTE ADO 

 

Anuncios

12 pensamientos en “EXPORTAR DATOS DE EXCEL A ACCESS MEDIANTE ADO

  1. Creó que algo salió mal brother algo falló en OnError ,al correr la macro aparece el error ” Se ha producido el error ‘-2147217900 (80040e14)’ en tiempo de ejecución:

    La tabla ‘TRABAJADORES’ ya existe

    Me gusta

    • Hola Christian,

      Antes de nada, prueba a ejecutar la macro de nuevo. Entra en el editor y ejecútala. Si has realizado modificaciones es posible que te sigo informando de un error anterior que ahora ya no existe, pero que es necesario restablecer y ejecutar de nuevo. Si este no es el problema:

      Asegúrate que la sentencia:
      obSQL = “DROP TABLE [TRABAJADORES]”
      ConAccess.Execute obSQL

      Está exactamente igual, sobre todo [TRABAJADORES]
      El control On error GoTo es para controlar errores por si no existen tablas. El error que indicas es porque no ha borrado la tabla Trabajadores. Por ello debes controlar la sentencia que te indico.

      Si el problema persiste. Enviáme los dos archivos (excel y access con un ejemplo de tabla y verifico cúal puede ser el problema. La macro funciona perfectamente en Excel 2007, 2010 y 2016.

      Saludos.

      Me gusta

  2. Pingback: AÑADIR REGISTROS EN ACCESS DESDE EXCEL CON VBA | Excel Signum

    • Hola Joaquín:

      Es sencillo, en la parte de la macro en la que construimos la sentencia SQL:

      obSQL = "SELECT * INTO " & Destino & " FROM " & Origen & " IN " & ConExcel

      Debes especificar aquellos campos que te interesan en lugar de exportar la tabla completa, es decir, así:

      obSQL = "SELECT [EMPLEADOS$].[ID], [EMPLEADOS$].[NOMBRE COMPLETO], [EMPLEADOS$].[SECCION] INTO " & Destino & " FROM " & Origen & " IN " & ConExcel

      Saludos.

      Me gusta

  3. Saludos, te queria consultar cual seria la diferencia si deseo pasar solo la primera fila con datos de la tabla de excel en lugar de la tabla completa o mejor aun un rango dentro de esta fila como ser A2:G2. Gracias de antemano.

    Le gusta a 1 persona

¿Te ha gustado?. Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s