VBA Копировать сводную таблицу на новый лист - PullRequest
0 голосов
/ 21 октября 2019

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

Текущее сообщение об ошибке:

Ошибка времени выполнения '1004': ошибка приложения или объекта.

Я хочу вставитьсводная таблица в ячейке D64, так как ячейки ниже и справа от этой ячейки все чистые. Моя существующая сводная таблица находится в ячейке A64: B36.

Может кто-нибудь помочь разобраться, что я делаю не так?

Sub ObsoPivotCopy
Dim PSheet As Worksheet
Dim DSheet As Worksheet
Dim PCache As PivotCache
Dim PTable As PivotTable
Dim Prange As Range
Dim lastRow As Long
Dim lastCol As Long

Set PSheet = Worksheets("1188 MJ Summary")
Set DSheet = Worksheets("ObsoCopy")

'Define Data Range
lastRow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row
lastCol = DSheet.Cells(1, Columns.Count).End(xlToLeft).Column
Set Prange = DSheet.Cells(1, 1).Resize(lastRow, lastCol)

'Define Pivot Cache
Set PCache = ActiveWorkbook.PivotCaches.Create _
(SourceType:=xlDatabase, SourceData:=Prange). _
CreatePivotTable(TableDestination:=PSheet.Cells(200, 200), _
TableName:="ObsoPivot")

'Insert Blank Pivot Table
Set PTable = PCache.CreatePivotTable _
(TableDestination:=PSheet.Cells(200, 200), TableName:="ObsoPivot")

'Insert Data Fields
ActiveSheet.PivotTables("ObsoPivot").AddDataField ActiveSheet.PivotTables( _
        "ObsoPivot").PivotFields("MARGIN €"), "Sum of MARGIN €", xlSum
    ActiveWindow.SmallScroll Down:=21
    ActiveSheet.PivotTables("ObsoPivot").PivotFields("Sum of MARGIN €"). _
        Orientation = xlHidden
    ActiveSheet.PivotTables("ObsoPivot").AddDataField ActiveSheet.PivotTables( _
        "ObsoPivot").PivotFields("NET MARGIN €"), "Sum of NET MARGIN €", xlSum
End Sub

1 Ответ

1 голос
/ 21 октября 2019
'Define Pivot Cache
Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Prange). _
     CreatePivotTable(TableDestination:=PSheet.Cells(200, 200), TableName:="ObsoPivot")

вы создаете сводную кэш, а затем напрямую вызываете CreatePivotTable в этом кеше: , которая возвращает сводную таблицу , а не сводную кэш ...

Так что вы тольконужна первая часть:

Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Prange)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...