使用VBA筛选OLAP数据透视表



我可以通过OLAP数据透视表访问我们的数据库。我经常想根据多个客户号码进行筛选(这些号码不是连续的(。然而,客户端列表太长了,无法滚动并手动选择客户端。我希望通过添加切片器并使用宏来选择可见的切片器项目来解决这个问题(尽管我对其他想法持开放态度(。我希望有一个工作表,在那里我可以添加一个客户号码列表,我想在运行时筛选宏应用于切片器的客户号码。

当我录制一个宏时,它产生了以下代码:

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)

我一直纠结于如何将数组实际输入到切片器项目列表中。当我运行上面的代码时,我得到一个错误:;运行时错误"1004":在OLAP多维数据集中找不到该项;。

我是数组和OLAP多维数据集的新手,如果有任何反馈,我将不胜感激。

Array函数获取一个值列表,并将它们转换为一个数组。使用Array(s_array)可以得到一个单元素数组,其中一个元素本身就是一个具有(s_count-1(个元素的数组,即从零到(scount-2(。换句话说,您已经创建了一个具有边界(0到0,0到s_count-2(的二维数组。

要解决这个问题,只需直接使用s_array,并省略Array(...)部分:

wb.SlicerCaches("Slicer_Client_ID").VisibleSlicerItemsList = s_array

注意:答案假设默认的Option Base 0有效,并且数组以元素0 开始