Вот полезный метод, адаптированный из Dynamically Change A Pivot Table's Data Source Range With This VBA Macro Code
PivotTable
. SourceData
, который устанавливается через метод ChangePivotCache
, который принимает объект PivotCache
. Чтобы создать его, вызовите ActiveWorkbook
. PivotCaches
. create
, который принимает SourceType
и range
как SourceData
. Наконец, после обновления, не забудьте позвонить RefreshTable
, чтобы применить изменения.
Вот как это выглядит в коде. Просто замените Sheet1
везде, где расположен ваш источник данных. Это автоматически найдет каждую сводную таблицу в вашей книге и обновит ее.
Sub AdjustPivotDataRange()
Dim pt As PivotTable, pc As PivotCache
Dim dataSheet As Worksheet, ws As Worksheet
Dim startPoint As Range, dataSource As Range, newRange As String
' get worksheet with data
Set dataSheet = ThisWorkbook.Worksheets("Sheet1")
' Dynamically Retrieve Range Address of Data
Set startPoint = dataSheet.Range("A1")
Set dataSource = dataSheet.Range(startPoint, startPoint.SpecialCells(xlLastCell))
newRange = dataSheet.Name & "!" & dataSource.Address(ReferenceStyle:=xlR1C1)
' create new PivotCache
Set pc = ThisWorkbook.PivotCaches.Create(_
SourceType:=xlDatabase, _
SourceData:=newRange)
' loop through all tables in all sheets
For Each ws In ActiveWorkbook.Worksheets
For Each pt In ws.PivotTables
' update pivot source and refresh
pt.ChangePivotCache pc
pt.RefreshTable
Next pt
Next ws
End Sub
Спасибо, что получил меня по правому краю. – phrenetic