数据透视表PageFilter和PivotItem的可见性

时间:2018-06-22 08:49:43

标签: excel vba pivot-table

当PageFilter设置为Visible = False时,我试图设置未显示的PivotItems的可见性。

数据透视表如下:

PivotTable Example

我要求将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分配为可见或不可见,但还不确定如何去做!

2 个答案:

答案 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函数用于这些项目。 希望这可以帮助。