2010-03-26 4 views
4

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

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

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

Любые предложения?

ответ

9

Следующий код 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

Предполагая, что вы готовы использовать VBA, this может быть актуальным.

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

+0

Спасибо, что получил меня по правому краю. – phrenetic

0

Вот полезный метод, адаптированный из 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 
Смежные вопросы