【问题标题】:How to filter pivot table with multiple items?如何过滤具有多个项目的数据透视表?
【发布时间】:2020-01-28 23:14:43
【问题描述】:

我正在尝试从数据透视表中过滤数据。为什么第一个设置有效而第二个设置无效?错误是“无法在 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


【问题讨论】:

  • 您是否在 Google 上搜索过“无法在 PivotItem 类中设置可见属性”以帮助进行故障排除?如果没有更多上下文(和数据示例),这看起来有一些有希望的事情可以尝试:stackoverflow.com/questions/11468705/…
  • 看来我只需要将这个添加到每个.ClearAllFilters .EnableMultiplePageItems = True

标签: excel vba pivot-table


【解决方案1】:

看起来这行得通……

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

【讨论】:

  • 这实际上仍然存在问题。请参阅上面发布的最终代码
【解决方案2】:
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

【讨论】:

    【解决方案3】:

    这最终对我有用:

    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
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      相关资源
      最近更新 更多