当参数还需要引号时,如何在每个项目周围创建一个带引号的数组?

问题描述 投票:0回答:1

我正在尝试使用VBA在OLAP Slicers上选择多个项目。

这样做的文字命令的例子是:

ThisWorkBook.SlicerCaches("Some_Slicer_Cache").VisibleSlicerItemsList = Array( _
"[D_MUMAP].[MU_ID].&[item1]", "[D_MUMAP].[MU_ID].&[item2]")

我从逗号分隔列表中拉出“项目”(在另一个单元格中)

item1, item2

并将它们处理成一个数组并将整个字符串输出到另一个单元格(我猜不是真的必须,但我喜欢有视觉效果)。

[D_MUMAP].[MU_ID].&[item1], [D_MUMAP].[MU_ID].&[item2]

当只有一个项目时,此数组进程有效,显然因为已经隐含了唯一的引号集。如果我尝试使用多个运行它,我会收到以下错误:

Run-time error '1004':
The query did not run or the Data Model could not be accessed.
Query (1,25) The syntax for ',' is incorrect.
([D_MUMAP].[MU_ID].&[item1], [D_MUMAP].[MU_ID].&[item2]).

我应该尝试解决这个问题的后续步骤?

excel vba excel-vba
1个回答
1
投票

我相信以下内容将起作用,在这种情况下,您根本不需要处理双引号:

Sub Foo()
    Dim list As String
    'the input list of items
    list = "item1,item2,item3"

    'split this into an array
    Dim listArray
    listArray = Split(list, ",")

    'for each element, prepend [D_MUMAP].[MU_ID].&[ and append ]
    Dim i As Integer
    For i = 0 To UBound(listArray)
        listArray(i) = "[D_MUMAP].[MU_ID].&[" & listArray(i) & "]"
    Next i

    'dump array for interest's sake
    Debug.Print Join(listArray, ", ")

    'update slicer
    ThisWorkbook.SlicerCaches("Some_Slicer_Cache").VisibleSlicerItemsList = listArray
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.