I want to programmatically refresh all the Pivot Tables in a given Worksheet of my Excel Workbook. After searching here on StackOverflow, I found this question where the answer suggests using either
ThisWorkbook.RefreshAll
or something like
Dim pivot As PivotTable
For Each pivot In Worksheets("MySheet").PivotTables
pivot.RefreshTable
pivot.Update
Next
As I only want to refresh the tables in a given sheet, the first method was not what I was looking for. Hence, I modified the second method to satisfy my needs.
The question I have here is what's the difference between the RefreshTable and the Update methods of the PivotTable object? I guess if we are using both of them, it means they are different in some way.
In what situation can we use only one of them in order to save time, as it seems that refreshing and updating take a considerable amount of time when the pivot table has a lot of data?
解决方案
According to this article and a little testing, the distinction is basically this:
Update: Update a single Pivot Table
Refresh: Update all PivotTables using the same source data
e.g. all pivot tables using the same external database, or all pivot tables using the same data table in Excel - e.g. if you have two data sheets, Data1 and Data2, refreshing any pivot table using Data1's data, will refresh all pivot tables using Data1's data
RefreshAll: Update all pivot tables in the workbook