我有一个工作簿,其中有一个RawData工作表,还有8-9个其他工作表,它们具有从RawData读取表的数据透视表。 RawData每天都在变化,即RawData表格中可以有更多或更少的行数。
现在,我使用Excel的ChangeDataSource功能手动更新每个工作表的每个数据透视表的DataSource属性。然而,这很痛苦。在网上爬行我发现vba代码一次更新所有数据透视表。我没有粘贴整个代码,但它看起来像这样。
ActiveSheet.PivotTables("PivotTable1").ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=<RawData-AddressRange>)
但是这段代码的作用是,它为每个数据透视表创建了新的数据透视缓存,并增加了文件的大小。但是,我不希望文件大小或数据透视缓存的数量增加,而只是更改现有数据透视表/数据透视表的数据源并刷新它们。
答案 0 :(得分:1)
只需将RawData转换为Excel表格(Ctrl + T是键盘快捷键),然后将数据透视表指向该表格。 (您将不得不再次使用“更改数据源”按钮,以使其从使用硬编码引用(如$ A $ 1:$ Z $ 1000)更改为Table引用(如Table1)。
从那时起,无论何时将新数据放入RawData,Table都会自动扩展(或收缩)以适应它,并且每当您单击刷新时,数据透视表将自动引用这些表而不是硬编码范围。
另请注意,如果数据透视表都基于完全相同的数据源,则刷新其中一个数据源会刷新所有数据源。
答案 1 :(得分:0)
您应该考虑使用动态命名范围来定义RawData。将所有数据透视表的数据源设置为动态命名范围,然后您需要做的就是单击数据&gt;全部刷新以更新所有数据透视表
这是一个关于动态命名范围的教程 http://www.excel-easy.com/examples/dynamic-named-range.html
答案 2 :(得分: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