使用VBA更新和筛选数据透视 – 通配符筛选器

我想清除pivotfield Invoicenr上的prevoiusfilter,更新数据透视表,而不是显示某些项目。
我想显示一切,但有一个以PO *开头的Invoicenr的项目(似乎这个*不能在VBA中使用)。
除此之外,我希望看到其他所有以及以PO开头且包含OHInvoicenr

看到我的尝试如下:

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 

使用此代码:

  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个命令button

过滤所有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的数据。

如果我正确地理解了这些条件,这应该会让你得到第一种情况的结果。

显示除了以“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“的invoicenr对我来说并不完全清楚。

如果你能澄清你所说的“ 一切以及以PO等开头的invoicenr”的意思,那么我可以根据需要更新我的代码。

此外,如果这两个代码块最终得到你想要的,那么你可以将每个macros分配给自己的工作表中的button。 这样,您可以切换两个场景,而不必打开VBEditor来运行代码。 如果您不确定如何操作,请查看此链接