Excel 循环遍历数组并更改OLAP数据透视表上的过滤器
我对VBA非常陌生,因此我正在寻找有关设置宏的帮助,该宏将从特定范围向数组中添加值,然后在该数组中循环以更新透视表上的过滤器。但是,并非每个值都可以设置。这方面的一个例子是,100中只设置了4个值,因此它只会在其中循环4次,并用这4个值更新过滤器。我以前从未使用过for循环,因此对此提供任何指导都将非常有用 到目前为止,我的代码是:Excel 循环遍历数组并更改OLAP数据透视表上的过滤器,excel,vba,pivot-table,Excel,Vba,Pivot Table,我对VBA非常陌生,因此我正在寻找有关设置宏的帮助,该宏将从特定范围向数组中添加值,然后在该数组中循环以更新透视表上的过滤器。但是,并非每个值都可以设置。这方面的一个例子是,100中只设置了4个值,因此它只会在其中循环4次,并用这4个值更新过滤器。我以前从未使用过for循环,因此对此提供任何指导都将非常有用 到目前为止,我的代码是: Sub Update_Filters() Dim PortfolioCodes As Variant PortfolioCodes = Sheet
Sub Update_Filters()
Dim PortfolioCodes As Variant
PortfolioCodes = Sheets("Configuration Sheet").Range("C7:C45").Value
Sheets("List").PivotTables("List").PivotFields( _
"[Portfolio].[Portfolio Code].[Portfolio Code]").VisibleItemsList = Array( _
"[Portfolio].[Portfolio Code].&[ABC1]", "[Portfolio].[Portfolio Code].&[ABC2]", _
"[Portfolio].[Portfolio Code].&[XYZ1]", "[Portfolio].[Portfolio Code].&[XYZ2]")
End Sub
以下是您问题的两个可能答案:
Option Explicit
Sub Update_Filters()
'this code will filter one portfolio code at a time
Dim LastRow As Long
With ThisWorkbook.Sheets("Configuration Sheet")
LastRow = .Cells(.Rows.Count, "C").End(xlUp).Row
Dim PortfolioCodes As Variant
PortfolioCodes = .Range("C7:C" & LastRow).Value
End With
For i = LBound(PortfolioCodes) To UBound(PortfolioCodes)
ThisWorkbook.Sheets("List").PivotTables("List").PivotFields( _
"[Portfolio].[Portfolio Code].[Portfolio Code]").VisibleItemsList = _
Array("[Portfolio].[Portfolio Code].&[" & PortfolioCodes(i) & "]")
'some code
Next i
End Sub
Sub Update_FiltersALL()
'This code will filter all the portfolio codes in your range
With ThisWorkbook.Sheets("Configuration Sheet")
Dim LastRow As Long
LastRow = .Cells(.Rows.Count, "C").End(xlUp).Row
Dim i As Long
i = 1
ReDim PortfolioCodes(1 To LastRow - 6) As String
Dim C As Range
For Each C In .Range("C7:C" & LastRow)
If Not IsEmpty(C) Then
PortfolioCodes(i) = "[Portfolio].[Portfolio Code].&[" & C.Value & "]"
i = i + 1
End If
Next C
End With
ThisWorkbook.Sheets("List").PivotTables("List").PivotFields( _
"[Portfolio].[Portfolio Code].[Portfolio Code]").VisibleItemsList = PortfolioCodes
End Sub
我不明白,你想让你的过程同时显示所有4个值的数据,或者一次过滤1个值,然后做些什么?我试图使用你提供的代码的第二个版本来更新所有值,但是它抛出了一个下标超出范围的错误。“有什么东西我看过头了吗?”吉尔在尝试过滤时问道?范围中可能有一些空值?或者一些不在olap上的代码?是的,范围中有空值,这就是为什么我希望范围在下一个单元格所在的点停止读取empty@Gil试试我的编辑。。它将忽略空单元格并仅循环到最后一行(将忽略可能在您的范围内的空单元格)。我收到一个新错误“Compile error:Constant expression required”,它将Dim PortfolioCodes中的最后一行(1到最后一行-6)突出显示为字符串