Проблема:
Получение ошибки времени выполнения'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
Я просмотрел другие источники и до сих пор не могу найти начальный подход к тому, почему это происходит.