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 导致 RefreshTable 从数据透视表中清除数据,而不是刷新它
False 允许 RefreshTable 正常工作。
默认为假。
调用过程结束后,此属性自动重置为 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 属性更改不会持续很长时间(在我的测试中,我可以看到它会尽快重置为 false,因此我建议您在想要进行更改时将其设置为 true对于枢轴项目)

有关 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 | 国际标准书号 10:0-596-15951-X

于 2016-09-21T08:22:54.523 回答
0

尝试添加以下内容。在我的情况下也有助于提高速度。

开头:

Application.Calculation = xlCalculationManual

在最后:

Application.Calculation = xlCalculationAutomatic
于 2016-02-08T15:36:53.830 回答
-1

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

于 2015-09-18T07:08:41.407 回答