如果切片器项目中不存在该数组项,则忽略该数组项(使用数组进行切片器过滤)

时间:2019-03-15 10:30:42

标签: arrays excel vba olap-cube

用数组中的项目过滤基于OLAP的数据透视表切片器时遇到了一个问题。

我有一个由机器编号组成的数组,该机器编号与切片器项目标题相同,如下所示:

machines = Array("Machine1", "Machine2", "Machine3" etc.. )

,我想使用此数组来过滤切片器:

ActiveWorkbook.SlicerCaches("MachinesSlicer").VisibleSlicerItemsList = Array(machines)

它可以正常工作,直到数组中的机器编号在切片器项目中不可见为止(例如,由于其他切片器过滤,例如日期等)。 有办法绕过那些导致问题的项目吗?

我试图创建一个新的数组,遍历切片器项,并使用以下项将它们与数组项进行比较:

For Each machName In machines
    For Each si1 In sl1.SlicerItems
        If si1.Caption = machName Then
        TestArray = TestArray & Chr(34) & si1.Caption & Chr(34) & Chr(44)
        End If
    Next si1
Next machName

但是它要做的是创建一个具有单个元素的数组,该元素是一个类似于以下内容的字符串:

"Machine1", "Machine2", Machine3" ...etc

但是我需要将这些元素分开以便将它们传递到VisibleSlicerItemList中。

也许你们中的某些人对解决此问题有任何想法。 任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

忽略我以前的回答,金发碧眼的时刻。您需要一门课程。

您可以基于sl1.SlicerItems

创建动态数组
Dim dynArr()
Dim i as Integer 'Long
Dim si1

For Each si1 In sl1.SlicerItems
    i = i + 1
    ReDim Preserve dynArr(1 To i)
    dynArr(i) = si1.Caption
Next

Pozdrawiam kolege;)