当PageFilter设置为Visible = False
时,我试图设置未显示的PivotItems的可见性。
数据透视表如下:
我要求将PageFilter设置为“ 1”之后不存在的所有项目从我的代码的下一部分中隐藏;它将遍历“消耗品名称”下显示的(现在)可见项目。
我只了解到这一点:
Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem
Set Pt = ActiveSheet.PivotTables("PivotTable1")
Set Pf = Pt.PivotFields("Consumable Name")
With Pt
.PivotCache.Refresh
.PivotCache.MissingItemsLimit = xlMissingItemsNone
End With
For Each Pi In Pf.VisibleItems
'Do Stuff
当前,这将忽略已经放置在VBA之外的表上的PageFilter,而只是循环浏览所有项,这些项将在没有过滤器的情况下位于数据透视表中。
我想我错过了一个事实,那就是我没有将PivotItems分配为可见或不可见,但还不确定如何去做!
答案 0 :(得分:1)
正如@PeterS所述,PivotItems
仍被报告为Visible
,即使您在过滤数据透视表后看不到它们。
快速尝试:您可以遍历DataRange
的{{1}}以获取每个可见的PivotField
:
PivotItem
这是另一种解决所有可见的PivotItem的尝试:
Private Sub VisiblePivotItems()
Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem
Dim PiCell As Range
Set Pt = ActiveSheet.PivotTable("PivotTable1")
Set Pf = Pt.PivotFields("Consumable Name")
With Pt
.PivotCache.Refresh
.PivotCache.MissingItemsLimit = xlMissingItemsNone
End With
For Each PiCell In Pf.DataRange.Cells
If PiCell.Value <> "(blank)" Then
Set Pi = Pf.PivotItems(PiCell.Value)
'Do Stuff
End If
Next PiCell
End Sub
答案 1 :(得分:0)
一周前,我在这里有类似的帖子,但尚未收到任何答案:Excel VBA loop through pivotitems that are filtered 似乎“页面”过滤器设置会影响屏幕上可见的内容,但实际上并不会影响所显示的枢轴项目的“可见性”属性。在我的特定情况下(一个非常简单的数据透视表,只有一个行字段,并且枢纽项目的数量有限),我通过遍历可见的枢纽项目(=基于数据透视表的位置的行数并排除了Grand总行),获取其名称,然后仅将GetPivotData函数用于这些项目。 希望这可以帮助。