加快数据透视表过滤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 

我要手动做到这一点,取消“显示所有”框,并重新检查我想看到的领域。 这导致Excel重新计算一次,只显示我想要可见的透视项目。 我想通过VBA代码做同样的事情。

我甚至尝试过使用

 Application.ScreenUpdating = False Application.DisplayAlerts = False 

但没有工作。

哦! 我刚刚解决了一个:

在你的代码的开始,像这样关掉自动更新:

 PivotTable.ManualUpdate = True 

然后在代码结束时,将其重新打开:

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

我发现这个线程search帮助编写代码,确定数据透视表值应该是可见的。 你的oPivotField背后是什么? 这是我失踪的部分!

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

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

尝试添加以下内容。 在我的情况下,帮助加快速度。

在开始时:

 Application.Calculation = xlCalculationManual 

最后:

 Application.Calculation = xlCalculationAutomatic 

pivottable.ManualUpdate [=设置]
True会导致RefreshTable清除数据透视表中的数据,而不是刷新数据
False允许RefreshTable正常工作。
默认是False。
调用过程结束后,该属性自动重置为False( 重要

在更新之前,该属性应该设置为true(例如,更改透视项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属性的改变并没有停留很长时间(在我的testing中,我可以看到它会尽快重置为false,所以我build议你在任何时候都要将其设置为true对于一个枢轴项目)

有关Excel中更新的更多信息,可以检查以下内容:
枢轴刷新与更新 – 有真正的区别吗?

参考文献:
标题: 用VBA和.NET编程Excel
作者: 杰夫·韦伯,史蒂夫·桑德斯
打印ISBN: 978-0-596-00766-9 | ISBN 10: 0-596-00766-3
电子书ISBN: 978-0-596-15951-1 | ISBN 10: 0-596-15951-X

保存工作簿的副本并将其保存为“excel 93-2007”文件。 然后尝试你的代码。 希望这可以帮助你。