【发布时间】:2020-02-14 20:54:23
【问题描述】:
是否有一种简单的方法可以同时更新单个 Excel 工作表上多个数据透视表的数据源?
所有数据透视表都引用相同的命名范围,但我需要创建第二个具有相同数据透视表但访问不同命名范围的工作表。
理想情况下,我希望能够进行某种搜索和替换操作(就像您可以在公式上做的那样),而不是手动更新每个单独的数据透视表。
有什么建议吗?
【问题讨论】:
标签: excel pivot-table
是否有一种简单的方法可以同时更新单个 Excel 工作表上多个数据透视表的数据源?
所有数据透视表都引用相同的命名范围,但我需要创建第二个具有相同数据透视表但访问不同命名范围的工作表。
理想情况下,我希望能够进行某种搜索和替换操作(就像您可以在公式上做的那样),而不是手动更新每个单独的数据透视表。
有什么建议吗?
【问题讨论】:
标签: excel pivot-table
以下 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
【讨论】:
假设您愿意使用 VBA,this 可能是相关的。
如果您遍历每个工作表上的数据透视表集合,您应该能够使用该帖子中显示的方法来修改数据源。语法应该非常类似于使用命名范围而不是单元格范围。
【讨论】:
我结合了上述代码,现在结合下面的代码,您可以对源数据使用表或范围引用。您所要做的就是通过替换 * 符号将源数据放入您的源数据中,然后您就可以开始了。
Sub Change_Pivot_Source()
Dim pt As PivotTable
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
For Each pt In ws.PivotTables
pt.ChangePivotCache ActiveWorkbook.PivotCaches.Create _
(SourceType:=xlDatabase, SourceData:="*****")
Next pt
Next ws
End Sub
【讨论】:
改编自Dynamically Change A Pivot Table's Data Source Range With This VBA Macro Code:
@987654322@.@987654323@ 属性可以通过ChangePivotCache 方法设置。PivotCache,请致电@987654326@.@987654327@.@987654328@
SourceType 和Range 作为SourceData 传递。 RefreshTable 应用更改。这是一个示例,它将自动查找工作簿中的每个数据透视表并对其进行更新。
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 = ActiveWorkbook.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
只需将"Sheet1" 替换为您的数据源所在的位置。
【讨论】: