簡體   English   中英

Excel 360 VBA 更改數據透視表過濾器

[英]Excel 360 VBA to change pivot table filter

我正在嘗試使用 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]") 關於我如何做到這一點的任何想法?

不確定你需要什么,但試試這樣的:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM