【发布时间】:2018-11-24 16:15:22
【问题描述】:
如果工作簿有 100 个数据透视表都使用一个缓存,Workbook.RefreshAll 会启动 100 次刷新还是仅启动 1 次?
【问题讨论】:
标签: excel refresh pivot-table vba
如果工作簿有 100 个数据透视表都使用一个缓存,Workbook.RefreshAll 会启动 100 次刷新还是仅启动 1 次?
【问题讨论】:
标签: excel refresh pivot-table vba
回答此类问题的最简单方法是编写一些代码并对其进行测试。
Sub RefreshTest()
Dim TimeTaken As Date
TimeTaken = Now()
ActiveWorkbook.RefreshAll
TimeTaken = Now() - TimeTaken
Debug.Print Now() & vbTab & "Refresh All" & vbTab & Format(TimeTaken, "HH:MM:SS") & " seconds."
TimeTaken = Now()
ActiveWorkbook.PivotCaches(1).Refresh
TimeTaken = Now() - TimeTaken
Debug.Print Now() & vbTab & "Refresh Specific Cache" & vbTab & Format(TimeTaken, "HH:MM:SS") & " seconds."
End Sub
在我的 PC 上测试具有 1048575 行的数据透视表时,使用 RefreshAll 和刷新其中一个数据透视表的数据透视表没有区别。
【讨论】:
这是一个有趣的问题。我最近在mrexcel.com 上发现了一篇帖子,询问了循环遍历每个数据透视表并单独更新每个数据透视表或使用.RefreshAll 的差异。
Jerry Sullivan 发布了一个答案(2011 年 8 月 16 日),并附有以下评论(版本 #2 --> .RefreshAll,版本 #1 --> 在 pt 中循环):
版本#2 可能更有效。除了不遍历每张工作表之外,它还可能会更新每个 PivotCache 一次,而如果任何 PivotTables 共享相同的 PivotCaches,则这些 PivotCaches 将在版本 #1 中多次刷新。
不过,我确实注意到他说的是“可能”。
【讨论】: