Как загрузить из массива в PivotFields? - PullRequest
0 голосов
/ 03 марта 2020

Я хочу изменить несколько полей в нескольких сводных листах.

Поэтому я создал новый Лист, где можно установить поля. Листы, поля и значения хранятся в двух массивах. Это мой код, он не будет работать на линии

.PivotFields(filterArr(i, 0)).CurrentPage = Sheets("Filter").[filterArr(i, 1)].Value

Может кто-нибудь сказать мне, почему?

 Sub Filter_Change()

'Array for diffrent Sheets
Dim sheetArr As Variant
sheetArr = Array("Sheet1", "Sheet2")

'Multidimesional Array for diffrent Filters and their Values
Dim filterArr(10, 1)

filterArr(0, 0) = "Field1"
filterArr(0, 1) = C10

filterArr(1, 0) = "Field2"
filterArr(1, 1) = C11



'Go through each Sheet
For Each element In sheetArr

        'Change every Filter in the Sheet
        For i = 0 To 1

          With Sheets(element).PivotTables(1)
            .PivotFields(filterArr(i, 0)).CurrentPage = Sheets("Filter").[filterArr(i, 1)].Value
            .PivotCache.Refresh
          End With

        Next i

Next element

End Sub

1 Ответ

0 голосов
/ 03 марта 2020

Разбейте строку ошибки на более мелкие этапы, используя промежуточные переменные, если это необходимо, чтобы с помощью debug.print и пошагового выполнения с помощью F8 вы могли определить, в чем проблема. Измените [filterArr (i, 1)] на Range (filterArr (i, 1)) и укажите значения C10 и C11. Также использование Option Explicit позволит выявить проблемы. Например

Option Explicit
Sub Filter_Change2()

    ' Sheets to process
    Dim arSheets As Variant
    arSheets = Array("Sheet1", "Sheet2")

    ' Filter parameters
    Dim param(2)
    param(1) = Array("Field1", "C10")
    param(2) = Array("Field2", "C11")

    ' Process each Sheet
    Dim n As Integer, i As Integer, sField As String, sValue As String
    For n = 0 To UBound(arSheets)

        For i = 1 To 2

            sField = param(i)(0)
            sValue = Sheets("Filter").Range(param(i)(1)).Value
            Debug.Print arSheets(n), i, sField, sValue

            With Sheets(arSheets(n)).PivotTables(1)
                .PivotFields(sField).CurrentPage = sValue
                .PivotCache.Refresh
            End With

        Next
    Next
    MsgBox "Done"

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...