Обновление источника данных в нескольких сводных таблицах в Excel - PullRequest
4 голосов
/ 26 марта 2010

Существует ли простой способ обновления источника данных для нескольких сводных таблиц на одном листе Excel одновременно?

Все сводные таблицы ссылаются на один и тот же именованный диапазон, но мне нужно создать второй рабочий лист с такими же сводными таблицами, но с другим именованным диапазоном.

В идеале я хотел бы иметь возможность выполнять какие-либо операции поиска и замены (как вы можете делать с формулами), а не обновлять каждую отдельную сводную таблицу вручную.

Есть предложения?

Ответы [ 3 ]

11 голосов
/ 26 марта 2010

Следующий код VBA изменит источник данных всех сводных таблиц на одном листе.

Вам потребуется обновить параметр Sheet2 до имени листа, используя новые сводные таблицы, а параметр Data2 - до нового именованного диапазона.

Sub Change_Pivot_Source()

    Dim pt As PivotTable

    For Each pt In ActiveWorkbook.Worksheets("Sheet2").PivotTables
             pt.ChangePivotCache ActiveWorkbook.PivotCaches.Create _
                (SourceType:=xlDatabase, SourceData:="Data2")
    Next pt

End Sub
1 голос
/ 26 марта 2010

Если вы готовы использовать VBA, это может иметь значение.

Если вы перебираете коллекцию сводных таблиц на каждом листе, вы должны использовать метод, показанный в этом посте, для изменения источника данных. Синтаксис должен быть очень похож на использование именованного диапазона, а не диапазона ячеек.

0 голосов
/ 10 марта 2016

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