循环使用报表过滤器来更改可见性不起作用

use*_*455 4 excel vba pivot-table excel-vba

我正在尝试选择一个报告过滤器,在本例中为加拿大.这意味着其余部分必须是隐形的.此代码无问题:

Public Sub FilterPivotTable()

    With ActiveSheet.PivotTables("Epidemiology").PivotFields("COUNTRY")

        .PivotItems("Canada").Visible = True
        .PivotItems("USA").Visible = False
        .PivotItems("Germany").Visible = False
        .PivotItems("France").Visible = False

    End With

End Sub
Run Code Online (Sandbox Code Playgroud)

但是,当我们将其他国家添加到我们的"流行病学"数据透视表中时,我正在努力做好准备,所以我尝试了一个for循环.此代码不起作用:

With ActiveSheet.PivotTables("Epidemiology").PivotFields("COUNTRY")

    .PivotItems("Canada").Visible = True

    For Each Pi In .PivotItems
        If Pi.Value = "CANADA" Then
            Pi.Visible = True
        Else
            Pi.Visible = False
        End If
    Next Pi

End With
Run Code Online (Sandbox Code Playgroud)

它给我一个错误就Pi.Visible = False行了.我得到的错误是Run-time error '1004': Unable to set the Visible property of the PivotItem class

为什么它在for循环中不起作用?!

令人沮丧的是,我在网上找到的所有例子都使用了类似的语法.(有些人使用索引,但我尝试过并得到了同样的错误.)

Sid*_*out 7

这是你在尝试什么?

Sub Sample()
    Dim Pi As PivotItem

    With ActiveSheet.PivotTables("Epidemiology").PivotFields("COUNTRY")

        .PivotItems("Canada").Visible = True

        For Each Pi In .PivotItems
            If UCase(Pi.Value) = "CANADA" Then
                Pi.Visible = True
            Else
                Pi.Visible = False
            End If
        Next Pi
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)