VBA для выбора всех и отмены выбора 0 и пустого фильтра для сводной таблицы на нескольких листах - PullRequest
0 голосов
/ 07 августа 2020

Приведенный ниже VBA выбирает все и отменяет выбор 0 и пропускает пробелы в фильтре сводной таблицы, по существу обновляя сводную таблицу после ввода новых данных. Он работает правильно на одном листе, но у меня проблема в том, что сводная таблица 1 копируется на несколько листов, и я также хочу, чтобы это запускало это на их сводных таблицах.

Я пытался использовать массив безрезультатно и Я слишком ладья ie, чтобы понять, как заставить это продолжить тот же VBA на следующем листе / сводной таблице.

Option Explicit

Public Sub FilterOutZeroAndBlanks()

    Dim pvt As PivotTable

    Set pvt = ThisWorkbook.Worksheets("Cairns Table").PivotTables("PivotTable1")
    Dim pvtField As PivotField
    Set pvtField = pvt.PivotFields("Quantity")

    Dim item As PivotItem
    Dim counter As Long
    Dim targetCounter As Long

    With pvtField

       For Each item In .PivotItems

           If item.Visible Then counter = counter + 1

       Next item

       If .PivotItems("0").Visible And .PivotItems("(blank)").Visible Then
            targetCounter = 2
       ElseIf .PivotItems("0").Visible Or .PivotItems("(blank)").Visible Then
            targetCounter = 1
       End If

       If Not targetCounter = counter Then

           .PivotItems("0").Visible = False
           .PivotItems("(blank)").Visible = False

       End If


    End With

End Sub

1 Ответ

0 голосов
/ 07 августа 2020

Сделайте сводную таблицу параметром - тогда вам будет проще повторно использовать метод, вызвав его из другого суб:

Sub Main()

    With ThisWorkbook
        FilterOutZeroAndBlanks .Worksheets("Cairns Table").PivotTables("PivotTable1")
        FilterOutZeroAndBlanks .Worksheets("Other Table").PivotTables("PivotTable1")
    End With

End Sub

Public Sub FilterOutZeroAndBlanks(pvt As PivotTable)

    Dim pvtField As PivotField
    Set pvtField = pvt.PivotFields("Quantity")
    
    Dim item As PivotItem
    Dim counter As Long
    Dim targetCounter As Long
    
    With pvtField
        For Each item In .PivotItems
            If item.Visible Then counter = counter + 1
        Next item
        
        If .PivotItems("0").Visible And .PivotItems("(blank)").Visible Then
            targetCounter = 2
        ElseIf .PivotItems("0").Visible Or .PivotItems("(blank)").Visible Then
            targetCounter = 1
        End If
        
        If Not targetCounter = counter Then
            .PivotItems("0").Visible = False
            .PivotItems("(blank)").Visible = False
        End If
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...