【问题标题】:Pivot Table "RefreshTable" vs "Update" methods数据透视表“刷新表”与“更新”方法
【发布时间】:2017-03-14 15:18:32
【问题描述】:

我想以编程方式刷新我的 Excel 工作簿的给定工作表中的所有数据透视表。在 StackOverflow 上搜索后,我找到了this question,其中答案建议使用任一

ThisWorkbook.RefreshAll

或类似的东西

Dim pivot As PivotTable

For Each pivot In Worksheets("MySheet").PivotTables
    pivot.RefreshTable
    pivot.Update
Next

因为我只想刷新给定工作表中的表格,所以第一种方法不是我想要的。因此,我修改了第二种方法以满足我的需要。

我的问题是RefreshTablePivotTable 对象的Update 方法有什么区别?我想如果我们同时使用它们,这意味着它们在某些方面是不同的。

在什么情况下我们可以只使用其中一个来节省时间,因为当数据透视表刷新更新似乎需要相当长的时间有很多数据吗?

【问题讨论】:

    标签: vba excel pivot-table


    【解决方案1】:

    根据this article和一点测试,区别基本是这样的:

    更新:更新单个数据透视表

    刷新:使用相同的源数据更新所有数据透视表

    例如使用相同外部数据库的所有数据透视表,或使用 Excel 中相同数据表的所有数据透视表 - 例如如果您有两个数据表,Data1 和 Data2,使用 Data1 的数据刷新任何数据透视表,将使用 Data1 的数据刷新所有数据透视表

    RefreshAll:更新工作簿中的所有数据透视表

    【讨论】:

    • 感谢您的回答。所以基本上,如果我在工作表中的所有数据透视表上执行RefreshTable,就不需要再次执行Update
    • @OscarAnthony 是的-但是,这也可能触发其他工作表中的数据透视表刷新-我不知道您的数据透视表是如何构建的,但是如果您在其他工作表中有数据透视表但得到它们的数据来自同一来源,当您使用 RefreshTable 时,这些数据将自动更新。此外,如果您在一张纸上的所有数据透视都使用相同的源数据,那么如果您在其中一张上使用 RefreshTable,这将对它们都起作用。如果您有 50 个表都使用相同的数据,则对每个表使用 RefreshTable 实际上将执行 2500 次更新! - 而 RefreshAll 只会做 50
    • 但是不,如果你已经在一个表上使用了 RefreshTable,那么绝对没有必要也对它使用 Update。
    【解决方案2】:

    您省略了answer 中的关键行:

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

    该代码适用于您的 Excel 版本足够旧时(想想 Excel 97 ish)。

    当时存在一个问题,即枢轴在RefreshTable 之后会有所更新,但并不完全如此,因此需要额外调用Update 才能“完全”更新它。这个问题已经修复很久了,我相信 Excel 2003 在 Refresh 之后已经不需要 Update

    【讨论】:

    • 好的,我明白了。所以根据@danl,如果我所有的数据透视表共享相同的连接,我可以只刷新 一个 表并假设所有其他表都会被刷新吗?
    • @OscarAnthony 是的。当您刷新枢轴缓存时,所有依赖于它的枢轴也会被刷新。如果您刷新一个表并且有一个在另一个表刷新(并尝试刷新第一个表)时触发的事件处理程序,则可能会发生神奇的无限刷新循环。我很确定我有一个搞砸的文件,其中有 不同的 数据透视缓存,但是当您刷新另一个表时会刷新一个表......但是,如果您的目标是刷新缓存,请明确执行: p.PivotCache.Refresh 而不是让那些认为您只打算更新一个表的读者感到困惑。
    • 太棒了!因此,给定数据透视表上的单个PivotCache.Refresh 也将刷新共享相同连接的所有其他数据透视表中的所有数据!很高兴知道!感谢您的帮助!
    猜你喜欢
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 2015-08-12
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多