我正在尝试根据表中的值列表过滤数据透视表。
Table2:
Selected Months Selected Years
9 2018
6
数据透视表上过滤器的可用值依次为8、9、6和3。
我正在尝试使用以下代码:
Sub ReportMonth()
Dim pt1 As PivotTable
Dim tbl As ListObject
Dim x As Long
Dim y As Long
Set tbl = Worksheets(6).ListObjects("Table2")
Set pt1 = Worksheets(5).PivotTables("PivotTable3")
'Clear the pivot cache and clear the pivot filter choices of old data.
'Enable multiple filter selections
pt1.PivotCache.MissingItemsLimit = xlMissingItemsNone
pt1.PivotCache.Refresh
pt1.PivotFields("Month").EnableMultiplePageItems = True
'y is the counter for Pivot filter items.
'x is the counter for rows in Table 2
With pt1.PivotFields("Month")
.ClearAllFilters
On Error Resume Next
For x = 1 To tbl.Range.Rows.Count
For y = 1 To .PivotItems.Count
If .PivotItems(y).Name = tbl.DataBodyRange(x, 1).Value Then _
.PivotItems(y).Visible = True Else _
.PivotItems(y).Visible = False
Next y
Next x
End With
End Sub
使用上面的代码,过滤器名称“ 3”可见,但表中甚至没有3。如果将.PivotItems(y).Name
更改为.PivotItems(y).Value
,则会得到相同的结果。如果我从For y = 1
更改为For y =2
,则过滤器名称“ 8”是可见的,并且不在表中。
我在for循环中放置了一个消息框,以返回x和y的值以及相应的过滤器和表值。这些正在按预期执行。
有人知道我该怎么做吗?