Contenido
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.