7

ピボットフィールドのあるピボットテーブルがあり、多くのアイテムが含まれています。ピボット値を表示するかどうかを決定するVBAコードロジックがあります。問題は、Excelが表示または非表示になっている各フィールドのピボットテーブルを再計算するため、非常に遅くなることです。すべての値を設定した後、一度だけ再計算するものが欲しいのですが。Application.Calculation = xlCalculationManualを使用してみましたが、役に立ちませんでした。

私が使用している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

5 に答える 5

8

おー!私はそれを解決しました:

コードの最初で、次のように自動更新をオフにします。

PivotTable.ManualUpdate = True

コードの最後で、オンに戻します。

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

ピボットテーブルの値を表示する必要があるかどうかを判断するコードを作成するためのヘルプを探しているこのスレッドを見つけました。oPivotField の背後にあるものは何ですか? それが私が見逃している部分です!

于 2010-04-22T19:44:27.760 に答える
3

PivotTableオブジェクトには、ManualUpdate探している可能性のあるプロパティがあります。

関連するコードについては、 http://www.ozgrid.com/VBA/hide-pivot-fields.htmを参照してください。

于 2009-04-19T01:50:08.400 に答える
1

pivottable.ManualUpdate [ = setting ]
True causes RefreshTable to clear data from the pivot table, rather than refreshing it
False allows RefreshTable to work normally.
Default is False.
This property is reset to False automatically after the calling procedure ends (important)

This property should be set to true just before you make an update (e.g. changing pivot item Visible property)
So your code would look like:

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()

As a conclusion, ManualUpdate property change doesn't stay for long (in my tests, I could see that it gets reset to false as soon as possible, so that's why I recommended you to set it to true whenever you want to make a change for a pivot item)

Excel での更新の意味の詳細については、次を確認してください:
ピボット更新と更新 – 本当の違いはありますか?

参考資料:
タイトル: VBA と .NET を使用した Excel のプログラミング 作成
者: Jeff Webb、Steve Saunders
印刷 ISBN: 978-0-596-00766-9 | ISBN 10: 0-596-00766-3
電子ブック ISBN: 978-0-596-15951-1 | ISBN 10: 0-596-15951-X

于 2016-09-21T08:22:54.523 に答える
0

以下を追加してみてください。私の場合も、速度を上げるのに役立ちました。

はじめに:

Application.Calculation = xlCalculationManual

最後に:

Application.Calculation = xlCalculationAutomatic
于 2016-02-08T15:36:53.830 に答える