2014-12-12 2 views
1

Я хочу, чтобы очистить prevoius фильтр pivotfield Invoicenr, обновить сводную таблицу, а не показывать определенные элементы.
Я хочу, чтобы показать все, кроме предметов, которые имеют Invoicenr, который начинается с PO * (кажется, что * не может быть использован в VBA?).
Кроме того, я хочу, чтобы увидеть все остальное и Invoicenr, который начинается с PO и содержит ОН.Update и фильтр поворота с помощью VBA - Wildcard фильтр

Смотрите мои попытки ниже:

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

Если я понять условия правильно, то это должно получить результаты, которые вы хотите в первом случае ...

Показать все товары, кроме тех, которые начинаются с "РО":

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», которые начинаются с «ПО» и также содержат «ОН»:

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 

Я менее уверен, что вы хотели для второго условия. Ваша формулировка «Я хочу видеть все остальное и invoicenr, который начинается с PO и содержит« OH », мне не совсем понятна.

Если вы хотите уточнить, что вы подразумеваете под "Все остальное и invoicenr, которое начинается с PO .. и т. Д. И т. Д.", Тогда я могу обновить код при необходимости.

Кроме того, если эти два блока кода получат то, что вы хотите, тогда вы можете просто назначить каждый макрос своей собственной кнопке на вашем листе. Таким образом, вы можете просто переключить два сценария, не открывая VBEditor для запуска кода. Если вы не знаете, как это сделать, проверить эту link

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 командные кнопки с этим кодом

фильтрация Все КРОМЕ ПО

Private Sub CommandButton1_Click() 
     Call Except_PO 

    End Sub 

Фильтр данных начиная с PO и содержит OH

Private Sub CommandButton2_Click() 
     Call POwithOH 

    End Sub 

Итак, если вы нажмете CommandButton1, ваш стержень будет фильтровать те данные, которые не начинаются с PO. И когда вы нажимаете CommandButton2, ваш стержень будет фильтровать все данные, которые начинаются с PO и содержит ОН.