【问题标题】:Updating DataSource of PivotTables via VBA, without creating new PivotCaches通过 VBA 更新数据透视表的数据源,无需创建新的数据透视缓存
【发布时间】:2016-05-05 07:48:27
【问题描述】:

我有一个工作簿,其中有一个 RawData 工作表,还有 8-9 个其他工作表具有从 RawData 读取表的数据透视表。 RawData 每天都在变化,即 RawData 工作表中的行数可能更多或更少。

现在,我使用 Excel 的 ChangeDataSource 功能手动更新每个数据透视表的 DataSource 属性。然而,这很痛苦。在网上爬行,我发现 vba 代码可以一次更新所有数据透视表。我没有粘贴整个代码,但它看起来像这样。

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

但是这段代码的作用是,它为每个数据透视表创建新的数据透视缓存并增加文件的大小。但是,我不希望文件大小或数据透视缓存的数量增加,而只是更改现有数据透视表/数据透视缓存的数据源并刷新它们。

【问题讨论】:

    标签: excel vba pivot-table


    【解决方案1】:

    为所有PivotTable设置一个PivotCache

    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
    

    【讨论】:

      【解决方案2】:

      只需将 RawData 转换为 Excel 表(Ctrl + T 是键盘快捷键),然后将数据透视表指向该表。 (您必须再使用一次“更改数据源”按钮,才能将其从使用 $A$1:$Z$1000 之类的硬编码引用更改为 Table1 之类的表引用)。

      从那时起,每当您将新数据放入 RawData 时,表格将自动扩展(或收缩)以适应它,并且每当您单击刷新时,数据透视表将自动引用这些表格而不是硬编码的范围。

      另请注意,如果数据透视表都基于完全相同的数据源,则刷新其中一个会刷新所有数据。

      【讨论】:

        【解决方案3】:

        您应该考虑使用动态命名范围来定义您的 RawData。将所有数据透视表的数据源设置为动态命名范围,然后您需要做的就是单击数据>全部刷新以更新所有数据透视表

        这里是关于动态命名范围的教程 http://www.excel-easy.com/examples/dynamic-named-range.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-29
          • 2014-06-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-22
          • 1970-01-01
          相关资源
          最近更新 更多