2009-04-18 38 views
5

我有一個數據透視表,其中包含許多項目。 我有VBA代碼邏輯來決定樞軸值是否應該是可見的。 問題是excel重新計算每個顯示或隱藏的字段的數據透視表,這使得它非常緩慢。 我希望在設置所有值之後重新計算一次。 我嘗試使用Application.Calculation = xlCalculationManual,但它沒有幫助。我使用加速數據透視表過濾VBA代碼

VBA代碼是這樣的

For i = 1 To oPivotField.PivotItems.Count 
    If (oPivotField.PivotItems(i).Name = "TestCondition") Then 
     oPivotField.PivotItems(i).Visible = True 'Recalulates pivot table 
    Else 
     oPivotField.PivotItems(i).Visible = False 'Recalulates pivot table 
    End If 
Next 

我通過取消選中手動做到這一點「全部顯示」複選框,並重新檢查我想看到的字段。這會導致Excel重新計算一次,並僅顯示我想要顯示的數據透視表項目。 我想通過VBA代碼做同樣的事情。

我甚至使用

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

嘗試,但沒有奏效。

回答

7

哦!我只是解決了一個:

在你的代碼的開頭,關閉自動更新這樣的:

PivotTable.ManualUpdate = True 

,然後在代碼的結束,重新打開它:

ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh 

我發現此線程尋找幫助編寫代碼,確定數據透視表值應該是否可見。你的oPivotField背後是什麼?這是我失蹤的部分!

-1

保存工作簿的副本並將其保存爲「excel 93-2007」文件。然後嘗試你的代碼。希望這可以幫助你。

0

嘗試添加以下內容。在我的情況下也幫助加快速度。

在開始時:

Application.Calculation = xlCalculationManual 

在結束:

Application.Calculation = xlCalculationAutomatic 
0

pivottable.ManualUpdate [=設定]
真引起RefreshTable從樞軸表清除數據,而不是刷新它
False允許RefreshTable正常工作。
默認爲False。調用過程結束(重要

您進行更新之前應將此屬性設置爲true後自動
此屬性重置爲false(例如改變支點項目Visible屬性)
所以,你的代碼看起來像:

For i = 1 To oPivotField.PivotItems.Count 
    If (oPivotField.PivotItems(i).Name = "TestCondition") Then 
     oPivotField.Parent.ManualUpdate = True 
     oPivotField.PivotItems(i).Visible = True 'doesn't recalculate pivot table because ManualUpdate is set to True 
    Else 
     oPivotField.Parent.ManualUpdate = True 
     oPivotField.PivotItems(i).Visible = False 'doesn't recalculate pivot table because ManualUpdate is set to True 
    End If 
Next 

'setting pivot table ManualUpdate property to False might be redundant at this point because it gets reset to false immediately after you set Visible property of oPivotField 
oPivotField.Parent.ManualUpdate = False 
oPivotField.Parent.Update() 

作爲結論,ManualUpdate屬性更改不留長(在我的測試中,我看得出來,它被重置爲假的因此我建議您在任何時候將其設置爲true)

有關Excel中更新的更多信息,您可以檢查以下內容:
Pivot Refresh vs. Update – is there a real difference?

個參考文獻:
標題:編程的Excel與VBA和.NET
通過:傑夫·韋伯,史蒂夫桑德斯
打印ISBN:978-0-596-00766-9 | ISBN 10:0-596-00766-3
電子書ISBN:978-0-596-15951-1 | ISBN 10:0-596-15951-X