excel vba:使用字符串设置切片器不';行不通
我正试图根据我先前在字符串中收集的值为透视表设置切片器 以下代码有效:excel vba:使用字符串设置切片器不';行不通,excel,vba,Excel,Vba,我正试图根据我先前在字符串中收集的值为透视表设置切片器 以下代码有效: ActiveWorkbook.SlicerCaches("Slicer_Merk1").VisibleSlicerItemsList = Array( _ "[dXref].[Merk].&[J17]", "[dXref].[Merk].&[J18]") 但是,我不需要像J17和J18这样的两个值,而是可以得到未知数量的值。因此,代码也可以是: ActiveWorkbook.SlicerCaches("Sl
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]"
或
然后我认为这会起作用:
ActiveWorkbook.SlicerCaches("Slicer_Merk1").VisibleSlicerItemsList = Array( _
txt)
我认为用一个包含相同代码的变量替换通常用于设置切片器的代码是可行的。但是,我不断收到错误消息,提示设置切片器时txt字符串中的逗号有问题。
我在网上搜索了几个小时,尝试了无数的事情。我可能错过了一些简单的。。。。有人能弄明白吗?非常感谢
下面的完整子组件(正在工作):
答案是,我必须将字符串拆分为一个数组,并且在准备这些项目时,数组中的各个项目不需要在其周围包含“”字符。我认为它们是必需的,因为如果您手动填充数组(录制a宏时看到的),它们就在那里 因此,手动创建的数组项如下所示: “[dXref].[Merk].&J17]” 使用数组时,项目如下所示: [dXref][Merk]和[J17]
我用该解决方案编辑了开始文章。子文件用于将透视表的选择应用到连接到该透视表的切片器。Array(txt)将给出一个只有一个字符串的数组,即txt的内容。使用Split从字符串创建数组。感谢您的回答Vincent,我确实尝试过,但无法让它工作。您能演示一下如何工作吗?谢谢!我不是在您的数据上测试这个,但使用Split创建数组应该是这样的:array=Split(txt“,”)ActiveWorkbook.SlicerCache(“Slicer_Merk1”).VisibleSicerItemsList=Array=Split(txt“,”)给了我一个编译错误,缺少:(我在我的文章中添加了完整的子部分,所以你们对我正在做的事情有了更多的了解..但它仍然不起作用。。
ActiveWorkbook.SlicerCaches("Slicer_Merk1").VisibleSlicerItemsList = Array( _
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