我怎样才能刷新我的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
来自战壕的注意事项:
- 请记住在更新数据透视表之前取消保护任何受保护的工作表。
- 经常保存 。
- 我会考虑更多,适时更新… 🙂
祝你好运!
代码
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,然后去查看 – >工具栏 – >数据透视表从这个工具栏,我们可以刷新点击! 这个符号。