Как отфильтровать сводную таблицу с несколькими элементами? - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь отфильтровать данные из сводной таблицы. Почему первая настройка работает, а вторая - нет? ошибка "невозможно установить видимое свойство в классе PivotItem" я должен делать это по-другому? в конечном итоге я хочу фильтровать на основе строки и применять правильные настройки для фильтрации.


Sub Macro11()
'

    ActiveSheet.PivotTables("PivotTable1").PivotFields("Brand").CurrentPage = _
        "(All)"
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("Brand")
   .PivotItems("BK").Visible = False
        .PivotItems("CV").Visible = True
        .PivotItems("CV R").Visible = True
        .PivotItems("GC").Visible = False
        .PivotItems("OS").Visible = False
        .PivotItems("CL").Visible = False
        .PivotItems("CL R").Visible = False

    End With




    ActiveSheet.PivotTables("PivotTable1").PivotFields("Brand").CurrentPage = _
        "(All)"
  With ActiveSheet.PivotTables("PivotTable1").PivotFields("Brand")
   .PivotItems("Bk").Visible = False
        .PivotItems("CV").Visible = False
        .PivotItems("CV R").Visible = False
        .PivotItems("GC").Visible = False
        .PivotItems("OS").Visible = False
        .PivotItems("CL").Visible = True
        .PivotItems("CL R").Visible = True

    End With

End Sub


Ответы [ 3 ]

1 голос
/ 23 января 2020

Похоже, это работает ...

Sub Macro11()

    With ActiveSheet.PivotTables("PivotTable1").PivotFields("Brand")
        .ClearAllFilters
        .EnableMultiplePageItems = True
        .PivotItems("BK").Visible = False
        .PivotItems("CV").Visible = True
        .PivotItems("CV R").Visible = True
        .PivotItems("GC").Visible = False
        .PivotItems("OS").Visible = False
        .PivotItems("CL").Visible = False
        .PivotItems("CL R").Visible = False

    End With


  With ActiveSheet.PivotTables("PivotTable1").PivotFields("Brand")
        .ClearAllFilters
        .EnableMultiplePageItems = True
        .PivotItems("Bk").Visible = False
        .PivotItems("CV").Visible = False
        .PivotItems("CV R").Visible = False
        .PivotItems("GC").Visible = False
        .PivotItems("OS").Visible = False
        .PivotItems("CL").Visible = True
        .PivotItems("CL R").Visible = True

    End With

End Sub

0 голосов
/ 28 января 2020

это то, что в конечном итоге сработало для меня:

For Each PT In ActiveSheet.PivotTables
    PTname = PT.Name
    Next
    With ActiveSheet.PivotTables(PTname).PivotFields("Brand")
        .ClearAllFilters
        .EnableMultiplePageItems = True
        For Each pvtitem In .PivotItems
        If pvtitem.Name = "OS" Then
            pvtitem.Visible = True
            Else
            pvtitem.Visible = False
           End If
          Next
    End With

0 голосов
/ 23 января 2020
Sub test()

Dim PI As PivotItem
Dim myArray() As Variant
Dim i As Integer

myArray = Array("BK", "GC", "OS", "CL", "CL R")

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Brand")
    .ClearManualFilter
    .EnableMultiplePageItems = True

    For i = LBound(myArray) To UBound(myArray)
        .PivotItems(myArray(i)).Visible = False
    Next i
End With

End Sub

или вы можете использовать другой подход

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Brand")
        For Each PI In .PivotItems
            If PI.Name <> "CV" Then PI.Visible = False
        Next PI
 End With
...