我在网上看到了很多关于使用VBA刷新数据透视表的问题。大多数建议这样的代码:刷新数据透视表
Sub RefreshPivotTables()
Dim pivotTable As PivotTable
For Each pivotTable In ActiveSheet.PivotTables
pivotTable.RefreshTable
Next
End Sub
尽管这种回答可能会产生预期的结果,它可能在一个可怕的代价这样做。
我有一个大的工作表; 11列乘771427行。然后将整个工作表定义为三个其他工作表中每个列的三个数据透视表(它们执行不同类型的分析)的源数据。我有大约199个数据透视表。
如果我使用“数据”菜单中的“全部刷新”按钮,则更新过程需要许多小时。由于没有进度报告来解释为什么,或者确认Excel没有挂起,我采取了构建VBA代码的方式,首先在新的工作表中列出数据透视表,然后逐个刷新指定的数据透视表。通过更新列表,我现在可以看到正在取得的进展。
但是我最近偶然发现了数据集中的一个变化,这个变化让我手动刷新了我的一个数据透视表,而且我惊恐地发现所有的数据透视表都是在几分钟内而不是几小时内更新的。
用VBA代码跳过.RefreshTable
方法,如果数据透视表和工作表的名称是不是我想更新(见下文)进一步的测试,使我相信,.RefreshTable
方法更新所有数据透视表 - 或者全部在该工作表中,全部在工作簿中,或者也许只是共享相同源数据的全部。此外,我相信微软在按下“全部刷新”按钮时也会遇到同样的问题。
Sub RefreshPivotTables()
Dim Pt As PivotTable
Dim St As Worksheet
For Each St In ActiveWorkbook.Worksheets
For Each pt In St.PivotTables
If pt.Name = "PivotTable151" And St.Name = "Sheet3" Then
Set pvtTable = pt.TableRange1.PivotTable
pvtTable.RefreshTable
End If
Next
Next
End Sub
我使用Excel 2010中那么是什么回事?如何改进上述答案以节省重复刷新?
一种替代方法可以写一个小宏,并指示它仅刷新要的支点。 – ManishChristian