0

我正在尝试根据我之前在字符串中收集的值为数据透视表设置切片器。

下面的代码有效:

ActiveWorkbook.SlicerCaches("Slicer_Merk1").VisibleSlicerItemsList = Array( _
"[dXref].[Merk].&[J17]", "[dXref].[Merk].&[J18]")

但是,我可以拥有未知数量的值,而不是像 J17 和 J18 这样的两个值。所以代码也可以是:

ActiveWorkbook.SlicerCaches("Slicer_Merk1").VisibleSlicerItemsList = Array( _
"[dXref].[Merk].&[J17]", "[dXref].[Merk].&[J18]", "[dXref].[Merk].&[J50]", "[dXref].[Merk].&[J500]")

为了解决这个问题,在早期的代码中,我收集了我想要过滤的任何值,并将它们放在一个名为“txt”的字符串中。

所以字符串“txt”可以包含这个:

"[dXref].[Merk].&[J17]", "[dXref].[Merk].&[J18]"

或者

"[dXref].[Merk].&[J17]", "[dXref].[Merk].&[J18]", "[dXref].[Merk].&[J50]", "[dXref].[Merk].&[J500]"

然后我认为这会起作用:

ActiveWorkbook.SlicerCaches("Slicer_Merk1").VisibleSlicerItemsList = Array( _
txt)

我认为用包含相同代码的变量替换通常用于设置切片器的代码会起作用。但是,我不断收到错误消息,提示设置切片器时 txt 字符串中的逗号有问题。我已经在网上搜索了几个小时并尝试了无数的事情。我可能遗漏了一些简单的东西....有人可以解决这个问题吗?非常感谢。

下面的完整子(现在正在工作):

Sub FiltersMatchen()
    Dim Selectie As Range
    Dim FilterArray() As String
    Dim FilterString As String
    Dim i As Long
    Dim Merk As Range
    Dim FiltercodeBegin As String
    Dim FiltercodeEinde As String

    Set Selectie = Selection

    i = 0
    ReDim FilterArray(0)
    For Each Merk In Selectie
        FilterArray(i) = Merk
        i = i + 1
        ReDim Preserve FilterArray(i)
    Next

    FiltercodeBegin = "[dXref].[Merk].&["
    FiltercodeEinde = "]"

    For i = LBound(FilterArray) To UBound(FilterArray) - 1
        FilterString = FilterString & FiltercodeBegin & FilterArray(i) & FiltercodeEinde & Chr(44)
    Next i

    FilterString = Left(FilterString, Len(FilterString) - 1)

    FilterArray = Split(FilterString, ",")

    ActiveWorkbook.SlicerCaches("Slicer_Merk1").VisibleSlicerItemsList = FilterArray
End Sub
4

1 回答 1

0

答案是我必须将字符串拆分为一个数组,并且数组中的各个项目在准备这些项目时不需要在它们周围有“”字符。我认为它们是必需的,因为如果您手动填写数组(您在录制宏时看到的内容),它们就在那里。

因此,手动数组项如下所示:“[dXref].[Merk].&[J17]”

使用数组,项目看起来像这样:[dXref].[Merk].&[J17

我用解决方案编辑了起始帖子。sub 用于将数据透视表的选择应用于连接到该数据透视表的切片器。

于 2018-07-09T09:43:25.963 回答