加快数据透视表过滤VBA代码

Ank*_*kit 7 excel vba pivot-table excel-vba

我有一个带有枢轴字段的数据透视表,包含许多项目.我有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
Run Code Online (Sandbox Code Playgroud)

我要手动取消选中"全部显示"框并重新检查我想要的字段.这会导致Excel重新计算一次并仅显示我想要的透视项目.我想通过VBA代码做同样的事情.

我甚至尝试过使用

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Run Code Online (Sandbox Code Playgroud)

但没有奏效.

小智 6

哦! 我刚刚解决了那个:

在代码的开头,关闭自动更新,如下所示:

PivotTable.ManualUpdate = True
Run Code Online (Sandbox Code Playgroud)

然后在代码的最后,将其重新打开:

ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
Run Code Online (Sandbox Code Playgroud)

我发现这个线程正在寻找帮助编写代码的帮助,该代码确定数据透视表值是否应该可见.你的oPivotField背后是什么?那是我错过的部分!


bar*_*owc 3

PivotTable对象有一个ManualUpdate属性,这可能就是您正在寻找的。

有关一些相关代码,请参阅http://www.ozgrid.com/VBA/hide-pivot-fields.htm