VBA - Slicercache Addpivottable Ошибка-1004 - PullRequest
1 голос
/ 17 марта 2020

Проблема:
Получение ошибки времени выполнения'1004: ошибка приложения или объекта в разделе кода ниже.

ActiveWorkbook.SlicerCaches(sl.Name).PivotTables.AddPivotTable pt

(где "sl "- это имя Slicercache," pt "- это объект PivotTable, который напрямую ссылается на этот объект).

Я также делал разные ссылки на приведенное выше, но все равно потерпел неудачу, как ...

ActiveWorkbook.SlicerCaches(sl.Name).PivotTables.AddPivotTable Worksheet("PivotSheet").PivotTables(pt.name)

Назначение: Попытка подключить дополнительные сводные таблицы (всего 30) к существующей слайс-кэше (всего 5), где эти сводные таблицы создаются и создаются объектом Class ("PivTab").

Что сделано :

  • Может генерировать сводные таблицы и сводные диаграммы, циклически проходя и создавая новый класс вышеупомянутого.
  • Может генерировать необходимые слайкеры и слайсеры (5) и подключаться к одной сводной таблице

(1) Функция кода, которая зацикливает необходимую информацию для создания сводной таблицы / диаграммы / слайсера

    For i = 2 To LastRow <- each row contains specs to build pivot table, pivot chart, slicer
        Dim oPT As New PivTab
        Dim oPC As New PivCht
        Dim oPS As New PivSlicer

        With PropSheet
            Set rLoop = .Range(.Cells(i, 1), .Cells(i, LastCol))

            oPT.ReadData PropSheet, rLoop
            oPT.SetupTable PivSheet, PivRange

            oPC.ReadData PropSheet, rLoop
            oPC.MakeCht PivSheet, oPT.ID

            oPS.ReadData PropSheet, rLoop
            oPS.SetSlicer PivSheet, oPT.PivTable, NameFieldDict

        End With
    Next

(2) Извлечение класса «PivSlicer», содержащего функцию «SetSlicer» для установки сводной таблицы подключения к slicercache

Public Function SetSlicer(ByVal PivSheet As Worksheet, pt As Object, dictNameField As Dictionary)
    Dim k, j As Variant
    Dim sl As SlicerCache
    Dim pvts As SlicerPivotTables

    If iCounter = 0 Then
        For Each k In dictNameField.Keys
            Set SCache = ActiveWorkbook.SlicerCaches.Add2(pt, CStr(dictNameField(k)), CStr(Replace(k, " ", "")))
        Next

        Call CreateFormatSlicer(PivSheet, ActiveWorkbook.Worksheets("Chart")) <- creates slicer

        For Each sl In ActiveWorkbook.SlicerCaches
            For Each j In ReqDict.Keys
                If InStr(1, j, sl.Name, vbBinaryCompare) > 0 And CStr(ReqDict(j)) = "Yes" Then
                    ActiveWorkbook.SlicerCaches(sl.Name).PivotTables.AddPivotTable pt
                End If
            Next
        Next
    End If

Я просмотрел другие источники и до сих пор не могу найти начальный подход к тому, почему это происходит.

...