我希望能够对符合特定条件的数据透视表 PivotTable
的一些 PivotItems
的 DataRange.Value
进行求和,并且每当 PageFilter
更改时都进行计算。以下是我的代码:
Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim pt As PivotTable, pi As PivotItem, q as Double
Set pt = ActiveSheet.PivotTables(1)
q = 0
For Each pi In pt.PivotFields(1).PivotItems
If pi.Name = someCriteria Then
q = q + pi.DataRange.Value
End If
Next pi
End Sub
代码每次 PT 更改时运行(显然是这样的),并且在 PageFilter
隐藏与 someCriteria
匹配的项目后运行得非常好,然后会出现 1004 错误
,因为它无法检索到 pi
的 DataRange
属性。
两个问题:
(在此情况下)是否有一种方法仅在 PageFilter
更改时运行代码(或必须使用 Worksheet_Change
事件执行)?
如何仅在筛选后的项目中运行我的 For-Loop
?
我已经想出了一个解决方案进行一些错误处理,但我想知道是否有更优雅的方法来解决它。
谢谢。
PivotTable_Update
事件和Worksheet_Change
事件的组合来捕获它,因为无法将筛选器与表格的其余部分隔离开来。任何对数据透视表的更改(不仅仅是筛选器)都会触发宏。关于for-loop
,我不明白为什么你会遇到13
错误,而我从未遇到过。另一方面,我确定我一直在错误地引用PivotItems
。实际的PivotField
是一个RowField
,并且它是层次结构中的第二个。在实际代码中,我通过名称引用它,这可能会导致问题。 - Pragabhava