¿Cómo crear una tabla dinámica desde una base de datos externa con VBA?

Para crear una tabla dinámica desde una base de datos externa utilizando VBA en Excel, debes seguir estos pasos detallados. Supongamos que la base de datos externa es una base de datos de Access, pero el concepto puede adaptarse a otras fuentes de datos como SQL Server u otras bases de datos. Aquí te mostraré cómo hacerlo:

  • Referencias Necesarias: Primero, asegúrate de activar las referencias necesarias en VBA:
    • Abre el Editor de VBA (presiona `Alt + F11` en Excel).
    • Ve a `Herramientas` -> `Referencias`.
    • Activa `Microsoft ActiveX Data Objects x.x Library` (elige la versión más reciente que esté disponible).
  • Configura la Conexión a la Base de Datos: Usa ADO para conectar con la base de datos.
  • Extrae los Datos y Carga en Excel: Una vez conectado, extrae los datos y colócalos en una hoja de Excel.
  • Crea la Tabla Dinámica: Utiliza esos datos extraídos para crear la tabla dinámica.

Aquí tienes un ejemplo de código VBA que ilustra este proceso:

Sub CrearTablaDinamicaDesdeBD()
    ' Variables para ADO
    Dim conn As Object
    Dim rs As Object
    Dim strConn As String
    Dim strSQL As String
    
    ' Variables para Excel
    Dim ws As Worksheet
    Dim ptCache As PivotCache
    Dim pt As PivotTable
    Dim dataRange As Range
    
    ' Establece la conexión a la base de datos
    Set conn = CreateObject("ADODB.Connection")
    strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:pathtoyourdatabase.accdb;"
    conn.Open strConn
    
    ' Consulta SQL para extraer los datos deseados
    strSQL = "SELECT * FROM YourTable"  ' Cambia 'YourTable' por el nombre de tu tabla
    
    ' Ejecuta la consulta
    Set rs = CreateObject("ADODB.Recordset")
    rs.Open strSQL, conn
    
    ' Verifica que el Recordset no esté vacío
    If Not rs.EOF Then
        ' Establece la hoja de trabajo destino
        Set ws = ThisWorkbook.Worksheets("Sheet1")  ' Aségurate de cambiar esto a tu hoja deseada
        
        ' Limpia la hoja antes de pegar nuevos datos
        ws.Cells.Clear
        
        ' Copia los datos del recordset a la hoja de Excel
        ws.Range("A1").CopyFromRecordset rs
        
        ' Define el rango de datos
        Set dataRange = ws.Range("A1").CurrentRegion
        
        ' Crea la cache de tabla dinámica
        Set ptCache = ThisWorkbook.PivotCaches.Create( _
            SourceType:=xlDatabase, _
            SourceData:=dataRange)
        
        ' Crea la tabla dinámica
        Set pt = ptCache.CreatePivotTable( _
            TableDestination:=ws.Range("E5"), _
            TableName:="MiTablaDinamica")
        
        ' Configura los campos de la tabla dinámica
        With pt
            .PivotFields("Campo1").Orientation = xlRowField  ' Ajusta los campos de acuerdo a tu necesidad
            .PivotFields("Campo2").Orientation = xlColumnField
            .PivotFields("Campo3").Orientation = xlDataField
        End With
    End If
    
    ' Limpia
    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing
End Sub

Pasos Personalizados:

  • Cambia las rutas y nombres: Ajusta `C:pathtoyourdatabase.accdb` y `YourTable` al camino correcto y nombre de tu tabla.
  • Configura la hoja de trabajo y los campos: Cambia `»Sheet1″` por la hoja de cálculo donde quieras poner los datos. También ajusta los nombres de campo (`»Campo1″`, `»Campo2″`, etc.) según los campos de tu base de datos.
  • Ubicación de la tabla: Cambia `ws.Range(«E5»)` al punto en la hoja donde quieres crear la tabla.

Una vez configurado y ejecutado este script, Excel conectará a la base de datos, extraerá los datos y creará una tabla dinámica basada en estos datos.

Conoce nuestra tienda

Ver más productos

Mejora tu nivel y logra tus objetivo

Excel

Excel cursos

Access

cursos de Access

Power BI

cursos power BI

Ayúdanos a hacer crecer el proyecto

Deja un comentario