Фильтр сводной таблицы OLAP с VBA - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь создать строку номеров проектов, а затем передать эту строку как .VisibleItemsList сводной таблицы OLAP. Я видел различные сообщения об этом, где я считаю, что это сработало нормально, но я получаю некоторые ошибки. Упрощенный код ниже:

Sub test()

Dim wks As Worksheet: Set wks = ThisWorkbook.Worksheets("test wks")
Dim ProjStr As String

wks.Activate

    ProjStr = """[Project].[PROJECT_NUMBER].&[200283.0.001.01.000]"""
    
    wks.PivotTables("pt_test").PivotFields( _
        "[Project].[PROJECT_NUMBER].[PROJECT_NUMBER]").VisibleItemsList = Array(ProjStr) 'does not work
        
    wks.PivotTables("pt_test").PivotFields( _
        "[Project].[PROJECT_NUMBER].[PROJECT_NUMBER]").VisibleItemsList = Array("[Project].[PROJECT_NUMBER].&[200283.0.001.01.000]") 'works fine

End Sub

Я получаю эту ошибку: введите описание изображения здесь

Я пробую это с одним проектом, но когда я создаю строку из нескольких проектов, я получаю ошибку времени выполнения «Запрос (1,52) Синтаксис для ',' неверен» 52-й символ - первая запятая. Пример строки, которую я создал бы с несколькими проектами ниже:

ProjStr = """[Project].[PROJECT_NUMBER].&[200283.0.001.01.000]""" & ", " & """[Project].[PROJECT_NUMBER].&[200283.0.001.02.000]"""

Тем не менее, из всего, что я могу сказать, ProjStr отформатирован так же, как и код, когда я записываю макрос с выбором нескольких проектов (кроме всех разрывов строк).

Есть идеи? Спасибо

1 Ответ

0 голосов
/ 18 августа 2020

отметьте лишние кавычки

ProjStr = """[Project].[PROJECT_NUMBER].&[200283.0.001.01.000]"""

VisibleItemsList = Array(ProjStr)
Debug.Print VisibleItemsList(0)

'result above is not the same below
'because there are extra quotations mark

VisibleItemsList = Array("[Project].[PROJECT_NUMBER].&[200283.0.001.01.000]")
Debug.Print VisibleItemsList(0)

'your string should be formated like this
ProjStr = "[Project].[PROJECT_NUMBER].&[200283.0.001.01.000],[Project].[PROJECT_NUMBER].&[200283.0.001.02.000]"
VisibleItemsList = Split(ProjStr, ",")
Debug.Print VisibleItemsList(0) & "," & VisibleItemsList(1)

'but I'd recomend to fill array item by item with ReDim Preserve and so on
'this will eliminate comma escaping problems and other special characters surprise
...