使用 VBA 过滤 OLAP 数据透视表 table
Filter OLAP pivot table with VBA
我可以通过 OLAP 数据透视表访问我们的数据库。我经常想根据多个客户号码(不连续)进行过滤。但是,客户列表太长了,以至于无法手动滚动 select 个客户。我希望通过添加一个切片器并使用宏来解决这个问题 select 可见切片器项目(尽管我对其他想法持开放态度)。我希望有一个工作表,我可以在其中添加一个客户编号列表,我想在 运行.
时过滤宏应用于切片器的列表
当我录制宏时,它产生了以下代码:
ActiveWorkbook.SlicerCaches("Slicer_Client_ID").VisibleSlicerItemsList = Array _
( _
"[DimMatter].[CurrClientNumber].&[090204]", _
"[DimMatter].[CurrClientNumber].&[092223]", _
"[DimMatter].[CurrClientNumber].&[102028]", _
"[DimMatter].[CurrClientNumber].&[103118]", _
"[DimMatter].[CurrClientNumber].&[104382]")
所以我编写了代码来创建一个数组,我希望将其输入到可见切片器项目列表中:
Set wb = Workbooks("workbook.xlsm")
Set iws = wb.Sheets("Client List")
Set tws = wb.Sheets("Table_Sheet")
s_count = iws.Range("A1").End(xlDown).Row
'initialize the array
ReDim s_array(s_count - 2)
'populate the array
For i = 2 To s_count
arr_itm = iws.Range("A1").Offset(i - 1, 0).Value
s_array(i - 2) = "[DimMatter].[CurrClientNumber].&[" & arr_itm & "]"
Next i
wb.SlicerCaches("Slicer_Client_ID").VisibleSlicerItemsList = Array(s_array)
我不知道如何将我的数组实际输入到切片器项目列表中。当我 运行 上面的代码时,我收到一条错误消息:“运行-time error '1004': The item could not be found in the OLAP Cube”。
我刚开始使用数组和 OLAP 多维数据集,因此非常感谢任何反馈。
Array function 获取值列表并将它们转换为数组。使用 Array(s_array)
为您提供一个单元素数组,其中一个元素本身就是一个包含 (s_count - 1) 个元素的数组 - 即从零到 (scount - 2)。换句话说,你创建了一个有边界的二维数组 (0 To 0, 0 To s_count - 2).
要解决这个问题,直接使用s_array
并省略Array(...)
部分:
wb.SlicerCaches("Slicer_Client_ID").VisibleSlicerItemsList = s_array
注意:答案假定默认 Option Base 0
有效并且数组以元素 0
开头
我可以通过 OLAP 数据透视表访问我们的数据库。我经常想根据多个客户号码(不连续)进行过滤。但是,客户列表太长了,以至于无法手动滚动 select 个客户。我希望通过添加一个切片器并使用宏来解决这个问题 select 可见切片器项目(尽管我对其他想法持开放态度)。我希望有一个工作表,我可以在其中添加一个客户编号列表,我想在 运行.
时过滤宏应用于切片器的列表当我录制宏时,它产生了以下代码:
ActiveWorkbook.SlicerCaches("Slicer_Client_ID").VisibleSlicerItemsList = Array _
( _
"[DimMatter].[CurrClientNumber].&[090204]", _
"[DimMatter].[CurrClientNumber].&[092223]", _
"[DimMatter].[CurrClientNumber].&[102028]", _
"[DimMatter].[CurrClientNumber].&[103118]", _
"[DimMatter].[CurrClientNumber].&[104382]")
所以我编写了代码来创建一个数组,我希望将其输入到可见切片器项目列表中:
Set wb = Workbooks("workbook.xlsm")
Set iws = wb.Sheets("Client List")
Set tws = wb.Sheets("Table_Sheet")
s_count = iws.Range("A1").End(xlDown).Row
'initialize the array
ReDim s_array(s_count - 2)
'populate the array
For i = 2 To s_count
arr_itm = iws.Range("A1").Offset(i - 1, 0).Value
s_array(i - 2) = "[DimMatter].[CurrClientNumber].&[" & arr_itm & "]"
Next i
wb.SlicerCaches("Slicer_Client_ID").VisibleSlicerItemsList = Array(s_array)
我不知道如何将我的数组实际输入到切片器项目列表中。当我 运行 上面的代码时,我收到一条错误消息:“运行-time error '1004': The item could not be found in the OLAP Cube”。
我刚开始使用数组和 OLAP 多维数据集,因此非常感谢任何反馈。
Array function 获取值列表并将它们转换为数组。使用 Array(s_array)
为您提供一个单元素数组,其中一个元素本身就是一个包含 (s_count - 1) 个元素的数组 - 即从零到 (scount - 2)。换句话说,你创建了一个有边界的二维数组 (0 To 0, 0 To s_count - 2).
要解决这个问题,直接使用s_array
并省略Array(...)
部分:
wb.SlicerCaches("Slicer_Client_ID").VisibleSlicerItemsList = s_array
注意:答案假定默认 Option Base 0
有效并且数组以元素 0