2009-04-18 165 views
5

私はピボットフィールドを持つピボットテーブルを持っており、多くのアイテムが含まれています。 ピボット値を表示するかどうかを決定するVBAコードロジックがあります。 問題は、表示または非表示になっているフィールドごとにピボットテーブルを再計算して、非常に遅くなります。 すべての値が設定された後、一度だけ再計算する場所が必要です。 私は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 

を使用してみましたが、うまくいきませんでした。

答えて

4

PivotTableオブジェクトは、あなたが探しているかもしれないManualUpdateプロパティを持っています。

は、いくつかの関連するコード

+0

私はそれを試みましたが、機能しませんでした。 – Ankit

7

ああためhttp://www.ozgrid.com/VBA/hide-pivot-fields.htmを参照してください!

PivotTable.ManualUpdate = True 

し、コードの末尾に、オンに戻すこと:

あなたのコードの開始時に、このような自動更新をオフにする:私はちょうど1があること解決

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

このスレッドでは、ピボットテーブルの値を表示するかどうかを決定するヘルプコードを検索しています。 oPivotFieldの背後には何がありますか?それは私が行方不明になっている部分です!

-1

ブックを保存し、「Excel 2007-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プロパティの変更は、(私のテストでは、私はそれのようにfalseにリセットされることを見ることができました長い間滞在していません。できるだけ早く、ピボットアイテムの変更を行う場合は、いつでもこの設定をtrueにすることをお勧めします)

Excelでのアップデートの意味については、次を確認してください。
Pivot Refresh vs. Update – is there a real difference?

参考文献:
タイトル:プログラミングVBAとExcelおよび.NET
で:ジェフ・ウェッブ、スティーブ・サンダース
プリントISBN:978-0-596-00766-9 | ISBN 10:0-596-00766-3
Ebook ISBN:978-0-596-15951-1 | ISBN 10:0-596-15951-X