【问题标题】:Does Workbook.RefreshAll refresh PivotTables or PivotCaches?Workbook.RefreshAll 是否刷新数据透视表或数据透视缓存?
【发布时间】:2018-11-24 16:15:22
【问题描述】:

如果工作簿有 100 个数据透视表都使用一个缓存,Workbook.RefreshAll 会启动 100 次刷新还是仅启动 1 次?

【问题讨论】:

    标签: excel refresh pivot-table vba


    【解决方案1】:

    回答此类问题的最简单方法是编写一些代码并对其进行测试。

    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 和刷新其中一个数据透视表的数据透视表没有区别。

    【讨论】:

      【解决方案2】:

      这是一个有趣的问题。我最近在mrexcel.com 上发现了一篇帖子,询问了循环遍历每个数据透视表并单独更新每个数据透视表或使用.RefreshAll 的差异。

      Jerry Sullivan 发布了一个答案(2011 年 8 月 16 日),并附有以下评论(版本 #2 --> .RefreshAll,版本 #1 --> 在 pt 中循环):

      版本#2 可能更有效。除了不遍历每张工作表之外,它还可能会更新每个 PivotCache 一次,而如果任何 PivotTables 共享相同的 PivotCaches,则这些 PivotCaches 将在版本 #1 中多次刷新。

      不过,我确实注意到他说的是“可能”。

      【讨论】:

      • Jerry 的评论适用于您单独刷新每个数据透视表而不是刷新它们共享的数据透视表的情况。这里不是这样。
      猜你喜欢
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多