Вот полезный метод, адаптированный из Динамическое изменение диапазона источника данных сводной таблицы с этим макросом VBA
Свойство 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