Ошибка выполнения 1004 при попытке выбрать элемент массива сводных полей OLAP - PullRequest
0 голосов
/ 26 апреля 2019

У меня возникают проблемы с циклическим просмотром элементов в моем поле разворота OLAP.У меня есть массив, который содержит имена / элементы, которые я хочу, чтобы фильтр проходил через, но я не могу получить поле сводки для выбора элемента массива (я хочу, чтобы только один был выбран за один раз)

Есть много вопросовтам с похожими проблемами, такими как это и это , и я попытался включить кодирование в мой код.Однако я не могу заставить его работать на меня

Это мой код на данный момент.Я попытался использовать текущую страницу, а не visibleitemlist, и вместо элемента просто используйте i или industryarray (i).

Sub Test()

Dim IndustryArray() As Variant
Dim element As Variant

Dim Industry As Range
Dim Data As Variant

Dim ptITS As PivotTable
Dim pfITS As PivotField
Dim ppfITS As PivotField

Set ptITS = Worksheets("Industry Time Series").PivotTables("PivotTable1")
Set pfITS = ptITS.PivotFields("[All Industries Combined].[Industry Details].[Industry Details]")
Set ppfITS = ptITS.PageFields("[All Industries Combined].[Industry Details].[Industry Details]")

Set Industry = Worksheets("Industry List").Range("A2:A211")
ReDim IndustryArray(0 To Industry.Cells.Count + 1)

For i = 0 To Industry.Cells.Count + 1
    IndustryArray(i) = "[ All Industries Combined].[Industry Details].&[" & Industry.Cells(i + 1).Value & "]"
Next i

For Each element In IndustryArray
    pfITS.ClearAllFilters
    pfITS.VisibleItemsList = element <-- error (for different variations as well)
Next element

End Sub

Я хочу, чтобы фильтр выбрал каждый элемент массива, затем очистил фильтр и перешел кследующий пунктПросто получите ошибки в указанной строке.

Любая помощь будет признательна!

1 Ответ

0 голосов
/ 27 апреля 2019

Хотя у меня нет примера VBA, я надеюсь, этот код C # поможет вам найти проблему в вашем коде. Ищите метод workerFilterList_DoWork. Соответствующий код:

            Excel.CubeField field = pvt.CubeFields.get_Item(args.LookIn);
            field.CreatePivotFields();
            field.IncludeNewItemsInFilter = false; //if this is set to true, they essentially wanted to show everything but what was specifically unchecked. With Filter List, we're doing the reverse... showing only what's spefically checked

            foreach (string sLevelUniqueName in dictLevelsOfFoundMembers.Keys)
            {
                Excel.PivotField pivotField = (Excel.PivotField)field.PivotFields.Item(sLevelUniqueName);
                if (field.Orientation == Excel.XlPivotFieldOrientation.xlPageField)
                {
                    field.EnableMultiplePageItems = true;
                }
                System.Array arrNewVisibleItems = dictLevelsOfFoundMembers[sLevelUniqueName].ToArray();
                pivotField.VisibleItemsList = arrNewVisibleItems;
                if (field.Orientation == Excel.XlPivotFieldOrientation.xlHidden)
                {
                    field.Orientation = Excel.XlPivotFieldOrientation.xlRowField; //if it's not in the PivotTable, then add it to rows
                }
                pivotField.ClearValueFilters();
                pivotField.ClearLabelFilters();
            }
...