Я провел значительное количество исследований о том, как добавить сводную таблицу в другую рабочую книгу, но у меня мало времени.
Мой набор данных
Макрос хранится в ThisWorkbook
Исходные данные для сводной таблицы хранятся в Открытой книге - имя листа "Необработанные данные"
Назначение сводной таблицы требуется для того же Откройте рабочую книгу , но на Имя листа "Сводка заявки"
Предостережение
Этот procedure
является частью гораздо более широкого проекта. Таким образом, у меня есть несколько module declarations
:
Private wbReconcile As Workbook
Private wsRawData As Worksheet
Private wsSummary As Worksheet
Затем они устанавливаются в разное rnet процедура (в том же модуле) как таковая:
Set wbReconcile = Workbooks.Open(RECON_FILE, False)
Set wsRawData = wbReconcile.Sheets("Raw Data")
Set wsSummary = wbReconcile.Sheets("Claim Summary")
Проблема & Ошибка
Проблема, с которой я столкнулся, заключается в том, что независимо от того, использую ли я variables
или печатаю имя рабочей книги, название рабочей таблицы / с и т. Д. c .. Я всегда получаю ошибка в строке Set myPivotTable
Сообщение об ошибке: Ошибка времени выполнения '5': неверный вызов процедуры или аргумент.
Мой код
Sub CreatePivotTable()
Dim myDestinationWorkbook As Workbook
Set myDestinationWorkbook = Workbooks("Template_Promo Claims Reconciliation.xlsm")
' Set myDestinationWorkbook = wbReconcile
Dim mySourceWorksheet As Worksheet
Set mySourceWorksheet = myDestinationWorkbook.Worksheets("Raw Data")
' Set mySourceWorksheet = wsRawData
Dim myDestinationWorksheet As Worksheet
Set myDestinationWorksheet = myDestinationWorkbook.Worksheets("Claim Summary")
' Set myDestinationWorksheet = wsSummary
'obtain address of destination cell range
Dim myDestinationRange As String
myDestinationRange = myDestinationWorksheet.Range("A1").Address(ReferenceStyle:=xlR1C1)
Dim mySourceData As String
mySourceData = mySourceWorksheet.Range("A1").CurrentRegion.Address(ReferenceStyle:=xlR1C1)
'create Pivot Table cache and create Pivot Table report based on that cache
Dim myPivotCache As PivotCache
Set myPivotCache = _
myDestinationWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:="[" & myDestinationWorkbook.name & "]" & _
mySourceWorksheet.name & "!" & _
mySourceData)
Dim myPivotTable As PivotTable
Set myPivotTable = myPivotCache.CreatePivotTable(TableDestination:="[" & _
myDestinationWorkbook.name & "]" & myDestinationWorksheet.name & "!" & _
myDestinationRange, TableName:="RawDataPivot")
End Sub
РЕДАКТИРОВАТЬ, ЧТОБЫ ПОКАЗАТЬ, КАК ИСПОЛЬЗУЕТСЯ ОТВЕТ
Sub AnswerPT()
Dim pc As PivotCache, pt As PivotTable
Dim wsSrc As Worksheet, wsDest As Worksheet
Dim rngSrc As Range, rngDest As Range
Set wsSrc = wsRawData
Set wsDest = wsSummary 'for convenience here
Set rngSrc = wsSrc.Range("A1").CurrentRegion 'source data
Set rngDest = wsDest.Range("A1") 'table location
Set pc = wsDest.Parent.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:=rngSrc, Version:=6)
Set pt = pc.CreatePivotTable(TableDestination:=rngDest, _
TableName:="PivotTable2", DefaultVersion:=6)
End Sub