Использование массива для фильтрации сводной таблицы с использованием VBA - PullRequest
0 голосов
/ 15 февраля 2019

Я новичок в массивах и как их правильно использовать.Я продолжаю получать MyArray(i,1) = subscript out of range, и он выделяет строки, в которые я вставляю эти звездочки.

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

Sub Macro1()     

Dim MyArray() As Variant
Dim i As Integer

    'Populate the array.
    MyArray = Array("I1", "I2", "I3")

    'Filter based off array values
    For i = 1 To UBound(MyArray)
*       ActiveSheet.PivotTables("PivotTable1").PivotFields("letters "). _
*       CurrentPage = MyArray(i, 1)
    Next i

End Sub

Мой старый код, который я пытаюсь сделать более эффективным:

Sub Macro1()      

    Sheets("NonDomestic").PivotTables("PivotTable1").PivotFields("letters "). _
        CurrentPage = "(All)"
    With Sheets("NonDomestic").PivotTables("PivotTable1").PivotFields( _
        "dir sales ship cust cot ")

        .ClearAllFilters
        .PivotItems("A1").Visible = False
        .PivotItems("B1").Visible = False
        .PivotItems("C1").Visible = False
        .PivotItems("C2").Visible = False
        .PivotItems("D1").Visible = False
        .PivotItems("D2").Visible = False
        .PivotItems("D3").Visible = False
        .PivotItems("D4").Visible = False
        .PivotItems("D5").Visible = False
        .PivotItems("D6").Visible = False
        .PivotItems("D7").Visible = False
        .PivotItems("E1").Visible = False
        .PivotItems("F1").Visible = False
        .PivotItems("F2").Visible = False
        .PivotItems("F3").Visible = False
        .PivotItems("F4").Visible = False
        .PivotItems("F5").Visible = False
        .PivotItems("F6").Visible = False
        .PivotItems("F7").Visible = False
        .PivotItems("G1").Visible = False
        .PivotItems("G2").Visible = False
        .PivotItems("G3").Visible = False
        .PivotItems("G4").Visible = False
        .PivotItems("G5").Visible = False
        .PivotItems("H1").Visible = False
        .PivotItems("H3").Visible = False
        .PivotItems("H4").Visible = False
        '.PivotItems("I1").Visible = False
        '.PivotItems("I2").Visible = False
        '.PivotItems("I3").Visible = False
    End With

On Error GoTo 0

1 Ответ

0 голосов
/ 15 февраля 2019

CurrentPage предназначен для показа только 1 PivotItem вашего фильтра.
Если у вас есть список видимых / невидимых PivotItems, то установите их индивидуально видимыми, обращаясь к ним по имени или по индексу.

Private Sub PivotFilterTest()
    Dim pf As PivotField
    Dim myArray() As Variant
    Dim i As Long

    myArray = Array("I1", "I2", "I3")
    Set pf = ActiveSheet.PivotTables("PivotTable1").PivotFields("letters ")
    With pf
        .ClearManualFilter
        .EnableMultiplePageItems = True
        For i = LBound(myArray) To UBound(myArray)
            .PivotItems(myArray(i)).Visible = False
        Next i
    End With
End Sub
...