2016-05-05 4 views
0

У меня есть книга, где есть лист RawData, и есть 8-9 других листов, которые имеют сводные таблицы, которые читают таблицу из RawData. RawData изменяется ежедневно, т. Е. Может быть больше или меньше строк в таблице RawData.Обновление DataSource сводных таблиц через VBA без создания новых PivotCaches

В настоящее время я вручную обновляю свойство DataSource каждой сводной таблицы на каждом листе, используя функцию ChangeDataSource в Excel. Однако это болезненно. Сканирование в Интернете Я нашел код vba для обновления всех сводных таблиц сразу. Я не вставляю весь код, но он выглядит примерно так.

ActiveSheet.PivotTables("PivotTable1").ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=<RawData-AddressRange>) 

Но что делает этот код, оно создает новые опорные кэша для каждой сводной таблицы и увеличивает размер файла. Тем не менее, я не хочу, чтобы размер файла или количество кеш-ключа увеличивался, но просто измените источник данных существующих сводных таблиц/PivotCaches и обновите их.

ответ

0

Вы должны использовать динамический именованный диапазон для определения RawData. Установить источник данных всех ваших сводных таблиц, чтобы быть вашим динамический именованный диапазон, а затем все, что вам нужно будет сделать, это данные о кликах> Обновить все, чтобы обновить все сводные таблицы

здесь учебник о динамических именованных диапазонов http://www.excel-easy.com/examples/dynamic-named-range.html

0

Чтобы установить один PivotCache для всех в PivotTable:

Sub UpdatePivots() 
    Dim ws As Worksheet, pivot As PivotTable, cache As PivotCache 

    ' create a new pivot cache ' 
    Set cache = ThisWorkbook.PivotCaches.Create(_ 
     XlPivotTableSourceType.xlDatabase, _ 
     ThisWorkbook.Sheets("Sheet1").UsedRange) 

    ' set the pivot cache for each pivot table 
    For Each ws In ThisWorkbook.Worksheets 
    For Each pivot In ws.PivotTables 
     If cache.Index Then 
     pivot.CacheIndex = cache.Index 
     Else 
     pivot.ChangePivotCache cache 
     End If 
    Next 
    Next 

    ' refresh the cache 
    cache.Refresh 
End Sub 
1

Просто включите RAWDATA в таблицу Excel (Ctrl + T клавиш на клавиатуре), а затем указать вашу PivotTables в этой таблице. (Вам нужно будет использовать кнопку «Изменить источник данных» еще раз, чтобы заставить ее перейти от использования жестко закодированной ссылки, например $ A $ 1: $ Z $ 1000, к таблице, например таблице 1).

С этого момента, когда вы вводите новые данные в RawData, таблица автоматически расширяет (или сокращает), чтобы разместить его, и всякий раз, когда вы нажимаете «Обновить», сводные таблицы автоматически ссылаются на эти таблицы вместо жестко заданного диапазона ,

Также обратите внимание, что если сводные таблицы основаны на одном и том же источнике данных, освежающий один из них обновляет их все.

Смежные вопросы