我想在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
答案 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的所有数据。