使用VBA更新和过滤透视 - 通配符过滤器

时间:2014-12-12 17:40:32

标签: excel vba excel-vba filter pivot-table

我想在pivotfield Invoicenr 上清除prevoius过滤器,更新数据透视表,不显示某些项目。
我想展示除 Invoicenr PO * 开头的项目之外的所有内容(似乎*不能用于VBA?)。
除此之外,我希望看到其他所有内容和 Invoicenr ,以 PO 开头并包含 OH

请参阅下面的尝试:

Sub Macro2()
'
' Macro2 Macro
'
    ThisWorkbook.RefreshAll    
      'Worksheets("Pivot").Select
      'ActiveSheet.PivotTables("PIVOT1").RepeatAllLabels xlRepeatLabels
    ActiveSheet.PivotTables("PIVOT1").PivotFields("Invoicenr"). _
        ClearLabelFilters              
    With ActiveSheet.PivotTables("PIVOT1").PivotFields("invoicenr")
        .PivotItems("PO").Visible = False         
    End With        
End Sub

2 个答案:

答案 0 :(得分:1)

如果我正确理解了这些条件,那么第一种情况就可以得到你想要的结果......

显示除“PO”以外的所有项目:

Sub ShowAllButPO()

    Dim ws As Worksheet
    Dim pvtTable As PivotTable
    Dim pvtField As PivotField
    Dim pvtItem As PivotItem

    Set ws = ActiveSheet
    Set pvtTable = ws.PivotTables("PIVOT1")
    Set pvtField = pvtTable.PivotFields("Invoicenr")

    pvtTable.RefreshTable

    pvtTable.ClearAllFilters

    For Each pvtItem In pvtField.PivotItems
        If Left(UCase(pvtItem), 2) = "PO" Then
            pvtItem.Visible = False
        End If
    Next

End Sub

这应该涵盖第二个条件......

显示“invoicenr”中以“PO”开头的所有项目也包含“OH”:

Sub ShowOnlyPO()

    Dim ws As Worksheet
    Dim pvtTable As PivotTable
    Dim pvtField As PivotField
    Dim pvtItem As PivotItem

    Set ws = ActiveSheet
    Set pvtTable = ws.PivotTables("PIVOT1")
    Set pvtField = pvtTable.PivotFields("Invoicenr")

    pvtTable.RefreshTable

    pvtTable.ClearAllFilters

    For Each pvtItem In pvtField.PivotItems
        If Left(UCase(pvtItem), 2) = "PO" And InStr(UCase(pvtItem), "OH") > 0 Then
            pvtItem.Visible = True
        Else
            pvtItem.Visible = False
        End If
    Next

End Sub

我不太确定你想要的第二个条件。你的措辞“我想看到其他所有东西以及以PO开头且包含”OH“的发票人”对我来说并不完全清楚。

如果您可以通过“其他所有以及以PO等开头的发票人”来澄清您的意思,那么我可以根据需要更新我的代码。

此外,如果这两个代码块最终得到您想要的,那么您可以将每个宏分配给工作表中的自己的按钮。这样,您可以切换两个方案,而无需打开VBEditor来运行代码。如果您不确定如何执行此操作,请查看 link

答案 1 :(得分:1)

使用此代码:

   Sub Except_PO()

      Dim var As Variant

      var = "PO*"

     ActiveSheet.PivotTables("Pivot1").PivotFields("Invoicenr").ClearAllFilters
    ActiveSheet.PivotTables("Pivot1").PivotFields("Invoicenr").PivotFilters. _
    Add Type:=xlCaptionDoesNotEqual, Value1:=var

   End Sub


  Sub POwithOH()

   Dim var As Variant

    var = "PO*OH*"

    ActiveSheet.PivotTables("Pivot1").PivotFields("Invoicenr").ClearAllFilters
    ActiveSheet.PivotTables("Pivot1").PivotFields("Invoicenr").PivotFilters. _
      Add Type:=xlCaptionEquals, Value1:=var


  End Sub

然后用这段代码制作2个命令按钮

过滤所有EXCEPT PO

    Private Sub CommandButton1_Click()
       Call Except_PO

     End Sub

以PO开头过滤数据并包含OH

   Private Sub CommandButton2_Click()
       Call POwithOH

     End Sub

因此,如果您单击CommandButton1,您的数据透视表将过滤那些不以PO开头的数据。 当您单击CommandButton2时,您的数据透视表将过滤以PO开头且包含OH的所有数据。