todas tablas tabla para macro libro las error dinamicas dinamica datos actualizar vba excel-vba refresh

vba - para - Actualizando todas las tablas dinámicas en mi libro de Excel con una macro



macro para actualizar datos en excel (10)

El código

Private Sub Worksheet_Activate() Dim PvtTbl As PivotTable Cells.EntireColumn.AutoFit For Each PvtTbl In Worksheets("Sales Details").PivotTables PvtTbl.RefreshTable Next End Sub

funciona bien.

El código se utiliza en el módulo de hoja de activación, por lo que muestra un parpadeo / falla cuando la hoja está activada.

Tengo un libro de trabajo con 20 tablas dinámicas diferentes. ¿Hay alguna manera fácil de encontrar todas las tablas dinámicas y actualizarlas en VBA?


En determinadas circunstancias, es posible que desee diferenciar entre una tabla dinámica y su PivotCache. El caché tiene su propio método de actualización y sus propias colecciones. Así que podríamos haber actualizado todos los PivotCaches en lugar de los PivotTables.

¿La diferencia? Cuando crea una nueva tabla dinámica, se le pregunta si la quiere basándose en una tabla anterior. Si dice que no, esta tabla dinámica obtiene su propio caché y duplica el tamaño de los datos de origen. Si dices que sí, mantén tu libro de trabajo pequeño, pero lo agregas a una colección de tablas pivote que comparten un único caché. Toda la colección se actualiza cuando actualiza cualquier tabla dinámica en esa colección. Por lo tanto, puede imaginarse la diferencia entre actualizar cada caché en el WorkBook, en comparación con actualizar cada tabla dinámica en el WorkBook.


Este código VBA actualizará todas las tablas / gráficos dinámicos en el libro de trabajo.

Sub RefreshAllPivotTables() Dim PT As PivotTable Dim WS As Worksheet For Each WS In ThisWorkbook.Worksheets For Each PT In WS.PivotTables PT.RefreshTable Next PT Next WS End Sub

Otra opción no programática es:

  • Haga clic derecho en cada mesa pivote
  • Seleccionar opciones de tabla
  • Marque la opción ''Actualizar al abrir'' .
  • Haga clic en el botón Aceptar

Esto actualizará la tabla dinámica cada vez que se abra el libro de trabajo.


Hay una opción de actualizar todo en la barra de herramientas de la tabla Pivot. Es suficiente. No tienes que hacer nada más.

Presione ctrl + alt + F5


He usado el comando enumerado a continuación en el pasado reciente y parece funcionar bien.

ActiveWorkbook.RefreshAll

Espero que ayude.


Incluso podemos actualizar una conexión particular y, a su vez, actualizará todos los pivotes vinculados a ella.

Para este código he creado slicer de la tabla presente en Excel :

Sub UpdateConnection() Dim ServerName As String Dim ServerNameRaw As String Dim CubeName As String Dim CubeNameRaw As String Dim ConnectionString As String ServerNameRaw = ActiveWorkbook.SlicerCaches("Slicer_ServerName").VisibleSlicerItemsList(1) ServerName = Replace(Split(ServerNameRaw, "[")(3), "]", "") CubeNameRaw = ActiveWorkbook.SlicerCaches("Slicer_CubeName").VisibleSlicerItemsList(1) CubeName = Replace(Split(CubeNameRaw, "[")(3), "]", "") If CubeName = "All" Or ServerName = "All" Then MsgBox "Please Select One Cube and Server Name", vbOKOnly, "Slicer Info" Else ConnectionString = GetConnectionString(ServerName, CubeName) UpdateAllQueryTableConnections ConnectionString, CubeName End If End Sub Function GetConnectionString(ServerName As String, CubeName As String) Dim result As String result = "OLEDB;Provider=MSOLAP.5;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Update Isolation Level=2" ''"OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False" GetConnectionString = result End Function Function GetConnectionString(ServerName As String, CubeName As String) Dim result As String result = "OLEDB;Provider=MSOLAP.5;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Update Isolation Level=2" GetConnectionString = result End Function Sub UpdateAllQueryTableConnections(ConnectionString As String, CubeName As String) Dim cn As WorkbookConnection Dim oledbCn As OLEDBConnection Dim Count As Integer, i As Integer Dim DBName As String DBName = "Initial Catalog=" + CubeName Count = 0 For Each cn In ThisWorkbook.Connections If cn.Name = "ThisWorkbookDataModel" Then Exit For End If oTmp = Split(cn.OLEDBConnection.Connection, ";") For i = 0 To UBound(oTmp) - 1 If InStr(1, oTmp(i), DBName, vbTextCompare) = 1 Then Set oledbCn = cn.OLEDBConnection oledbCn.SavePassword = True oledbCn.Connection = ConnectionString oledbCn.Refresh Count = Count + 1 End If Next Next If Count = 0 Then MsgBox "Nothing to update", vbOKOnly, "Update Connection" ElseIf Count > 0 Then MsgBox "Update & Refresh Connection Successfully", vbOKOnly, "Update Connection" End If End Sub


Sí.

ThisWorkbook.RefreshAll

O, si su versión de Excel es lo suficientemente antigua,

Dim Sheet as WorkSheet, Pivot as PivotTable For Each Sheet in ThisWorkbook.WorkSheets For Each Pivot in Sheet.PivotTables Pivot.RefreshTable Pivot.Update Next Next


Si está utilizando MS Excel 2003, vaya a ver-> Barra de herramientas-> Tabla dinámica Desde esta barra de herramientas podemos hacer actualizaciones haciendo clic! este simbolo


Tiene una colección de tablas dinámicas en un objeto de la hoja de trabajo de VB. Entonces, un ciclo rápido como este funcionará:

Sub RefreshPivotTables() Dim pivotTable As PivotTable For Each pivotTable In ActiveSheet.PivotTables pivotTable.RefreshTable Next End Sub

Notas de las trincheras:

  1. Recuerde desproteger las hojas protegidas antes de actualizar la tabla dinámica.
  2. Ahorre seguido
  3. Voy a pensar en más y actualizar a su debido tiempo ... :)

¡Buena suerte!


ActiveWorkbook.RefreshAll actualiza todo, no solo las tablas dinámicas sino también las consultas ODBC. Tengo un par de consultas de VBA que hacen referencia a las conexiones de datos y el uso de esta opción falla cuando el comando ejecuta las conexiones de datos sin los detalles proporcionados por el VBA.

Recomiendo la opción si solo quieres que los pivots se actualicen

Sub RefreshPivotTables() Dim pivotTable As PivotTable For Each pivotTable In ActiveSheet.PivotTables pivotTable.RefreshTable Next End Sub