Tablas Dinámicas soluciones y preguntas frecuentes

2.2. Modos de Actualización de una tabla dinámica




Modos de actualización de la tabla dinámica Microsoft Excel

Un crosstab MS Excel puede ser actualizado de varios modos:

  • La manera mas fácil y rápida es seleccionar la área de la tabla dinámica, hacer clic derecho y elegir el botón ‘Refresh Data’. En cuanto la conexión está configurada correctamente, el informe de tabla dinámica será actualizado instantáneamente.

  • Otra manera común de actualizar un Excel crosstab es usar el código VBA (Visual Basic for Applications). Con esta solución el código puede ser ejecutado al suceder un evento como por ejemplo cambio de valor de una celda, en un tiempo adquirido, cambio del ‘focus’, clic de un botón o cualquier otro evento que se puede captar en Excel VBA.
    El método VBA que permite actualizar una tabla dinámica es [objeto PivotTable].Update. Para actualizar todos las tablas dinámicas en una hoja de cálculo Excel y guardar la fecha y tiempo de última actualización usa este código:
    Sub actualizar_todos_los_crosstabs()
    
    Dim pt As PivotTable
    Dim i As Integer
    
    For i = 1 To Sheets.Count
            For Each pt In Sheets(i).PivotTables
                pt.Update
                ‘fecha y tiempo de ultima actualizacion
                Sheets(i).Range("a1") = " Ultima actualización: " & Date & " " & Time
            Next pt
    Next i
    End Sub
    

  • la manera mas compleja y avanzada de la actualización de las tablas dinámicas en MS Excel es usar el código Visual Basic Scripting (VBscript - Windows Host Script). Los códigos VB pueden ser ejecutados desde la línea de órdenes del sistema operativo y este tipo de ficheros tienen una extensión .vbs
    El ejemplo abajo permite actualizar todas las tablas dinámicas en una hoja de cálculo indicada en una variable workbookName (nombre de hoja). Será bastante fácil modificar este código así que léase todos los ficheros xls de un directorio y actualice todos los crosstabs en estos ficheros.
    Dim excelObject as Object
    Dim workbookName as String
    Dim excelFileLocation as String
    Dim nCntSheets as Integer
    
    excelFileLocation = "d:\excel_pivot-tables\"
    workbookName = "etl-tools_info-crosstab.xls"
    
    set shell = createobject("wscript.shell")
    
    ' ******************** actualización del fichero Excel ********************** 
    	Set excelObject = CreateObject("Excel.Application")
    
    	'excelObject.Visible = true  ' usa esta opción para dejar la ventana Excel visible
    
    	' abrir la hoja
    	excelObject.workbooks.open excelFileLocation & workbookName 
    	' no muestrar las alertas
    	excelObject.Application.DisplayAlerts = False
    	'na actualiza la pantalla
    	excelObject.Application.ScreenUpdating = False
    
    	'contar hojas
    	nCntSheets = excelObject.Workbooks(workbookName).sheets.count
    	
    	' ejecuta la función actualizar_todos_los_crosstabs()
    	excelObject.Run "refresh_funcs. actualizar_todos_los_crosstabs ()" 
    
    	'****** guardar cambios y cerrar 
    	excelObject.Workbooks(workbookName).Save
    	excelObject.Application.Quit
    
    	'************* flush Excel instance from memory
    	excelObject = Nothing
    
    ' message box
    MsgBox "Todas las hojas actualizadas"