En este módulo, aprenderás cómo interactuar con bases de datos utilizando VBA. Este conocimiento es crucial para automatizar tareas que involucran la manipulación de datos almacenados en bases de datos, como Microsoft Access, SQL Server, entre otros.

Conceptos Clave

  1. ADO (ActiveX Data Objects): Es una biblioteca que permite a VBA interactuar con bases de datos.
  2. Conexión a la Base de Datos: Establecer una conexión con la base de datos es el primer paso para realizar cualquier operación.
  3. Consultas SQL: Utilizar SQL (Structured Query Language) para consultar y manipular datos.
  4. Manipulación de Datos: Insertar, actualizar y eliminar registros en la base de datos.

Configuración del Entorno

Antes de comenzar, asegúrate de que la biblioteca ADO esté habilitada en tu proyecto VBA:

  1. Abre el Editor de VBA (Alt + F11).
  2. Ve a Herramientas > Referencias.
  3. Busca y selecciona Microsoft ActiveX Data Objects x.x Library (donde x.x es la versión disponible).

Estableciendo una Conexión a la Base de Datos

Para conectarte a una base de datos, necesitas una cadena de conexión. Aquí hay un ejemplo de cómo conectarse a una base de datos de Microsoft Access:

Sub ConectarABaseDeDatos()
    Dim conn As Object
    Set conn = CreateObject("ADODB.Connection")
    
    Dim connectionString As String
    connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\ruta\a\tu\base_de_datos.accdb;"
    
    conn.Open connectionString
    
    If conn.State = 1 Then
        MsgBox "Conexión exitosa"
    Else
        MsgBox "Error en la conexión"
    End If
    
    conn.Close
    Set conn = Nothing
End Sub

Explicación del Código

  • CreateObject("ADODB.Connection"): Crea una nueva instancia de la conexión ADO.
  • connectionString: Define la cadena de conexión con el proveedor y la ruta de la base de datos.
  • conn.Open: Abre la conexión utilizando la cadena de conexión.
  • conn.State: Verifica el estado de la conexión (1 significa abierta, 0 significa cerrada).
  • conn.Close: Cierra la conexión.

Realizando Consultas SQL

Una vez establecida la conexión, puedes ejecutar consultas SQL para interactuar con la base de datos. Aquí hay un ejemplo de cómo realizar una consulta SELECT:

Sub ConsultarDatos()
    Dim conn As Object
    Dim rs As Object
    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    
    Dim connectionString As String
    connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\ruta\a\tu\base_de_datos.accdb;"
    
    conn.Open connectionString
    
    Dim sql As String
    sql = "SELECT * FROM NombreDeLaTabla"
    
    rs.Open sql, conn
    
    Do While Not rs.EOF
        Debug.Print rs.Fields("NombreDelCampo").Value
        rs.MoveNext
    Loop
    
    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing
End Sub

Explicación del Código

  • CreateObject("ADODB.Recordset"): Crea una nueva instancia del conjunto de registros ADO.
  • rs.Open sql, conn: Ejecuta la consulta SQL y abre el conjunto de registros.
  • rs.Fields("NombreDelCampo").Value: Accede al valor de un campo específico en el conjunto de registros.
  • rs.MoveNext: Mueve el cursor al siguiente registro.
  • rs.EOF: Verifica si se ha llegado al final del conjunto de registros.

Manipulación de Datos

Puedes insertar, actualizar y eliminar registros utilizando comandos SQL. Aquí hay ejemplos de cada operación:

Insertar Datos

Sub InsertarDatos()
    Dim conn As Object
    Set conn = CreateObject("ADODB.Connection")
    
    Dim connectionString As String
    connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\ruta\a\tu\base_de_datos.accdb;"
    
    conn.Open connectionString
    
    Dim sql As String
    sql = "INSERT INTO NombreDeLaTabla (Campo1, Campo2) VALUES ('Valor1', 'Valor2')"
    
    conn.Execute sql
    
    conn.Close
    Set conn = Nothing
End Sub

Actualizar Datos

Sub ActualizarDatos()
    Dim conn As Object
    Set conn = CreateObject("ADODB.Connection")
    
    Dim connectionString As String
    connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\ruta\a\tu\base_de_datos.accdb;"
    
    conn.Open connectionString
    
    Dim sql As String
    sql = "UPDATE NombreDeLaTabla SET Campo1 = 'NuevoValor' WHERE Campo2 = 'Condicion'"
    
    conn.Execute sql
    
    conn.Close
    Set conn = Nothing
End Sub

Eliminar Datos

Sub EliminarDatos()
    Dim conn As Object
    Set conn = CreateObject("ADODB.Connection")
    
    Dim connectionString As String
    connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\ruta\a\tu\base_de_datos.accdb;"
    
    conn.Open connectionString
    
    Dim sql As String
    sql = "DELETE FROM NombreDeLaTabla WHERE Campo2 = 'Condicion'"
    
    conn.Execute sql
    
    conn.Close
    Set conn = Nothing
End Sub

Ejercicio Práctico

Ejercicio

  1. Crea una base de datos de Access con una tabla llamada Empleados que tenga los campos ID, Nombre, y Puesto.
  2. Escribe un programa en VBA que:
    • Inserte tres registros en la tabla Empleados.
    • Actualice el Puesto de uno de los empleados.
    • Elimine uno de los registros basándose en el ID.

Solución

Sub GestionarEmpleados()
    Dim conn As Object
    Set conn = CreateObject("ADODB.Connection")
    
    Dim connectionString As String
    connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\ruta\a\tu\base_de_datos.accdb;"
    
    conn.Open connectionString
    
    ' Insertar registros
    conn.Execute "INSERT INTO Empleados (ID, Nombre, Puesto) VALUES (1, 'Juan Perez', 'Gerente')"
    conn.Execute "INSERT INTO Empleados (ID, Nombre, Puesto) VALUES (2, 'Ana Gomez', 'Analista')"
    conn.Execute "INSERT INTO Empleados (ID, Nombre, Puesto) VALUES (3, 'Luis Martinez', 'Desarrollador')"
    
    ' Actualizar registro
    conn.Execute "UPDATE Empleados SET Puesto = 'Senior Analista' WHERE ID = 2"
    
    ' Eliminar registro
    conn.Execute "DELETE FROM Empleados WHERE ID = 3"
    
    conn.Close
    Set conn = Nothing
End Sub

Conclusión

En este módulo, has aprendido cómo conectar VBA a una base de datos, realizar consultas SQL y manipular datos. Estos conocimientos te permitirán automatizar tareas complejas que involucren bases de datos, mejorando la eficiencia y precisión de tus proyectos.

En el siguiente módulo, exploraremos cómo usar VBA para controlar otras aplicaciones de Microsoft Office, comenzando con la automatización de Word.

© Copyright 2024. Todos los derechos reservados