Excel 360 VBA для изменения фильтра сводной таблицы - PullRequest
1 голос
/ 13 марта 2020

Я пытаюсь изменить фильтр для сводной таблицы, которая была настроена с использованием функции «Добавить эти данные в модель данных» с использованием VBA, которая считывает выбор списка, содержащего элементы для фильтрации. Я начал с записи макроса, чтобы увидеть, что произойдет, и получил следующее:

ActiveSheet.PivotTables("Pivottable1").PivotFields("[Range 1 1].[Quarter].[Quarter]").VisibleItemsList = _
    Array("[Range 1 1].[Quarter].&[1Q20]", "[Range 1 1].[Quarter].&[3Q20]")

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

For x = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(x) = True Then
       myArray = Array("[Range 1 1].[Quarter].&[" & ListBox1.List(x) & "]")
    End If
Next x

ActiveSheet.PivotTables("Pivottable1").PivotFields("[Range 1 1].[Quarter].[Quarter]").VisibleItemsList = myArray

Я тестировал другие способы, которые не работали, например, используя:

' This didn't work:
Set myArray = CreateObject("System.Collections.ArrayList")
myArray.Add "[Range 1 1].[Quarter].&[1Q20]"

' This method didn't work either
Dim myArray(2) As Variant
myArray2(0) = "1Q20"
myArray2(1) = "2Q20"

Мне нужно заменить Array("[Range 1 1].[Quarter].&[1Q20]", "[Range 1 1].[Quarter].&[3Q20]") на то, что я могу настроить динамически. Любые идеи о том, как я могу это сделать?

1 Ответ

2 голосов
/ 13 марта 2020

Не уверен, что вам нужно, но попробуйте что-то вроде этого:

Dim myArray() As String,k as integer
ReDim myArray(ListBox1.ListCount-1)
k = -1
For x = 0 To ListBox1.ListCount - 1

    If ListBox1.Selected(x) = True Then
    k = k + 1
       myArray(k) = "[Range 1 1].[Quarter].&[" & ListBox1.List(x) & "]"
    End If
Next x
ReDim Preserve myArray(k)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...