4

1つのレポートフィルター(この場合はカナダ)を選択しようとしています。つまり、残りは非表示にする必要があります。このコードは問題なく機能します。

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

ただし、「疫学」ピボットテーブルに他の国を追加するときの準備をしているので、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

それは私に回線上のエラーを与えますPi.Visible = False。私が得るエラーはRun-time error '1004': Unable to set the Visible property of the PivotItem class

forループ内で機能しないのはなぜですか?!

苛立たしいことに、私がオンラインで見つけたすべての例は、同様の構文を使用しています。(インデックスを使用するものもありますが、それを試したところ、同じエラーが発生しました。)

4

2 に答える 2

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
于 2013-01-17T21:09:14.670 に答える
0

ピボットテーブルフィルターでは、常に少なくとも1つのアイテムを選択する必要があります。コードの後半で1つを選択する場合でも。

With Pt.PivotFields("COUNTRYSCENARIO")

 ' Sets all filters to true, resetting it.
 .ClearAllFilters

 ' This is necessary if you want to select any options
 ' other than "All Pivot Items = Visible" and 
 ' "OnlyOneSpecificPivotItem = Visible"
 .EnableMultiplePageItems = True

 If .PivotItems.Count > 0 Then

     ' goofy but necessary
     Set firstPi = .PivotItems(1)

         For Each Pi In .PivotItems                                

             ' Make sure that that first pivot item is visible.
             ' It gets mad if it's already visible and you
             ' set it to visible with firstPi.Visible = True
             ' ...pretty silly

             If firstPi.Visible = False Then firstPi.Visible = True

             ' Don't loop through firstPi
             If Pi.Value <> firstPi.Value Then

                 If Pi.Value = opt1 Or Pi.Value = opt2 Or Pi.Value = opt3 Then
                     Pi.Visible = True

                 ElseIf Pi.Visible = True Then

                     Pi.Visible = False

                 End If

             End If

          Next Pi

          ' Finally perform the check on the first pivot item   
          If firstPi = opt1 Or firstPi = opt2 Or firstPi = opt3 Then
              firstPi.Visible = True
          Else
              firstPi.Visible = False
          End If
       End If
End With

何も選択しようとしない場合、たとえばopt 1=""およびopt2=""およびopt3=""の場合、同じエラーが発生することに注意してください。少なくとも1つのピボットアイテムを選択する必要があります。

于 2013-01-30T17:01:59.600 に答える