Insertar registros en tabla de Access desde Excel usando VBA y ADO

Insertar registros en tabla de Access desde Excel usando VBA y ADO

En este tutorial voy a mostrarte una macro que nos ayudará a dar de alta registros directamente en una tabla de Access usando VBA mediante ADO (ActiveX Data Objects).

Microsoft ActiveX Data Objects (ADO)

ADO es uno de los mecanismos que habilita a las aplicaciones cliente para conectarse a distintos orígenes de datos y acceder y manipular la información o los datos. La conexión de las aplicaciones hacia los orígenes de de datos se hace mediante proveedores OLE DB, que para nuestro tutorial usaremos un proveedor para conectarnos a una Base de datos de Access.

Ver video Pasar datos de Excel a Access usando VBA y macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Qué es un Recordset

Es importante conocer el concepto de Recordset, ya que siempre que nos comunicamos con una Base de datos, sea Oracle, SQL, MySQL o Access, este concento siempre estará presente.

Un Recordset es una estructura de datos que se usa para almacenar información en una Tabla de una Base de datos. El término Recordset se una en infinidad de lenguajes de programación y prácticamente sirve para dar de alta registros, así como eliminar y actualizar los mismos.

Activar Referencia en el IDE de Visual Basic para aplicaciones

Antes de escribir cualquier código para conectarnos a una base de datos mediante ADO es importante activar la referencia a la librería de ADO.

  • Abrimos el IDE de VBA usando Alt + F11.
  • Abrimos el menú Herramientas > Referencias.
  • Marcamos Microsoft ActiveX Data Objects 6.1 Library.

Activamos la referencia a Microsoft ActiveX Data Objects 6.1 Library (ADO).

Figura 1. Activamos la referencia a Microsoft ActiveX Data Objects 6.1 Library (ADO).

Base de datos de Access

Para este tutorial nuestro archivo de Excel se encuentra en la misma ruta que la base de datos de Access. Nuestra base de datos se llamará MiBase.accdb y la tabla se llamará MiTabla.

Base de datos de Access.

Figura 2. Base de datos de Access.

El formulario de captura

Tenemos un UserForm sencillo donde solo contamos con 3 TextBox para capturar datos. Los datos de los 3 cuadros de texto deseamos que se guarden en la tabla de la Figura 2

UserForm para capturar los datos que serán registrados en Access.

Figura 3. UserForm para capturar los datos que serán registrados en Access.

Código VBA de la macro

El siguiente código lo pondremos en un Módulo normal y será llamado desde un CommandButton del formulario.

Nota: Es importante que la base de datos de Access se encuentre en la misma ruta de este archivo para que funcione esta macro.

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Sub AltaRegistrosAccess()

Dim Conn As ADODB.Connection
Dim MiConexion
Dim Rs As ADODB.Recordset
Dim MiBase As String

MiBase = "MiBase.accdb"

Set Conn = New ADODB.Connection
MiConexion = Application.ThisWorkbook.Path & Application.PathSeparator & MiBase

With Conn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .Open MiConexion
End With

Set Rs = New ADODB.Recordset
Rs.CursorLocation = adUseServer
Rs.Open Source:="MiTabla", _
    ActiveConnection:=Conn, _
    CursorType:=adOpenDynamic, _
    LockType:=adLockOptimistic, _
    Options:=adCmdTable

'Cargar los datos a Tabla de Access
With Rs
    .AddNew
    .Fields("Campo1") = UserForm1.TextBox1.Value
    .Fields("Campo2") = UserForm1.TextBox2.Value
    .Fields("Campo3") = UserForm1.TextBox3.Value
End With

Rs.Update

'Cerrar la conexión
Rs.Close
Conn.Close
Set Rs = Nothing
Set Conn = Nothing

MsgBox "Alta exitosa", vbInformation, "EXCELeINFO"

End Sub

Descarga los archivos de ejemplo

Alta de registros en Tabla de Access desde Excel con VBA.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *