我怎样才能刷新我的Excel工作簿中的所有数据透视表?

我有一个工作簿20个不同的数据透视表。 有没有简单的方法来find所有的透视表,并在VBA中刷新它们?

是。

ThisWorkbook.RefreshAll 

或者,如果您的Excel版本够旧,

 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 

该VBA代码将刷新工作簿中的所有数据透视表/图表。

 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 

另一个非程序化选项是:

  • 右键单击每个数据透视表
  • select表格选项
  • 勾选“刷新打开”选项。
  • 点击OKbutton

这将每次打开工作簿时刷新数据透视表。

ActiveWorkbook.RefreshAll刷新一切,不仅是数据透视表,而且还有ODBC查询。 我有几个VBA查询引用数据连接,并使用此选项崩溃作为命令运行数据连接没有从VBA提供的详细信息

如果您只想刷新枢纽,我build议select

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

在某些情况下,您可能想要区分数据透视表和其数据透视表。 Cache有它自己的刷新方法和它自己的集合。 所以我们可以刷新所有的PivotCaches而不是数据透视表。

区别? 当你创build一个新的数据透视表时,你会被问到是否需要它基于前一个表。 如果你说不,这个数据透视表会得到它自己的caching,使源数据的大小加倍。 如果你说是的话,你可以保持你的工作簿小,但是你添加到共享一个caching的数据透视表集合。 刷新该集合中的任何单个数据透视表时,将刷新整个集合。 因此,您可以设想,刷新WorkBook中的每个caching之间可能存在什么区别,而不是刷新WorkBook中的每个数据透视表。

在数据透视表工具栏中有一个刷新全部选项。 足够了。 不必做任何事情。

按下ctrl + alt + F5

VB 工作表对象上有一个数据透视表集合。 所以,像这样的快速循环将起作用:

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

来自战壕的注意事项:

  1. 请记住在更新数据透视表之前取消保护任何受保护的工作表。
  2. 经常保存
  3. 我会考虑更多,适时更新… 🙂

祝你好运!

代码

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

工作正常。

该代码在激活表单模块中使用,因此激活表单时会显示闪烁/毛刺。

即使我们可以刷新特定的联系 ,反过来也会刷新与之相关的所有支点。

对于这个代码,我从Excel中的表格创build了切片器

 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 

我最近使用下面列出的命令,似乎工作正常。

 ActiveWorkbook.RefreshAll 

希望有所帮助。

如果您使用MS Excel 2003,然后去查看 – >工具栏 – >数据透视表从这个工具栏,我们可以刷新点击! 这个符号。