我正在尝试根据我之前在字符串中收集的值为数据透视表设置切片器。
下面的代码有效:
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