我正在尝试为Microsoft Excel创建VBA代码,以从数据透视表中过滤掉很多项目(例如,每100个项目中有3个项目)。到目前为止,我一直在使用的方法是声明一些我不想为假的项目,例如:
.PivotItems("Item A").Visible = True
.PivotItems("Item B").Visible = True
.PivotItems("Item C").Visible = False
.PivotItems("Item D").Visible = False
.PivotItems("Item E").Visible = False
但是,将来这会变得很乏味,因为表中可能添加了更多项目,这意味着每次添加新项目时,我都需要编辑代码。
是否可以不使用
过滤出两个或多个项目.Visible=false
例如
pf.CurrentPage = "Item A" + "Item B"
答案 0 :(得分:0)
您必须调整数据透视表和字段名称,但这在我的测试中有效:
Sub filter_pivot()
Dim i As Integer
ActiveSheet.PivotTables("PivotTable1").ClearAllFilters
With ActiveSheet.PivotTables("PivotTable1").PivotFields("CLCL")
For i = 1 To .PivotItems.Count
Debug.Print .PivotItems(i)
Select Case .PivotItems(i).Name
Case Is = "Item C"
.PivotItems(i).Visible = False
Case Is = "Item D"
.PivotItems(i).Visible = False
Case Is = "Item E"
.PivotItems(i).Visible = False
End Select
Next i
End With
End Sub
我们仍在使用.Visible
,但是添加多少新项目都没关系。
答案 1 :(得分:0)
您可以使用一系列项目:
Dim arr() As Variant
' Array of items to be kept visible (or hidden depending on your code)
arr = Array("Item 1", "Item 2", "Item 2")
For Each itm In pt.PivotFields("Value").PivotItems
If Not IsError(Application.Match(itm.Caption, arr, 0)) Then
itm.Visible = True
Else
itm.Visible = False
End If
Next