我在網上看到了很多關於使用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