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
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: 1.可以设置[PivotTable](https://learn.microsoft.com/en-us/office/vba/api/Excel.PivotTable) . [SourceData](https://learn.microsoft.com/en-us/office/vba/api/Excel.PivotTable.SourceData)属性,该属性通过ChangePivotCache方法设置。 1.要创建新的PivotCache,请调用[ActiveWorkbook](https://learn.microsoft.com/en-us/office/vba/api/Excel.Application.ActiveWorkbook) . [PivotCaches](https://learn.microsoft.com/en-us/office/vba/api/Excel.PivotCaches) . [Create](https://learn.microsoft.com/en-us/office/vba/api/excel.pivotcaches.create) 1.您需要传入一个SourceType和一个Range作为SourceData。 1.最后,更新后,确保调用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
5条答案
按热度按时间6vl6ewon1#
下面的VBA代码将更改单个工作表上所有数据透视表的数据源。
您需要将
Sheet2
参数更新为包含新透视表的工作表的名称,并将Data2
参数更新为新命名的范围。zy1mlcev2#
假设您愿意使用VBA,this可能是相关的。
如果你在每个工作表上遍历数据透视表集合,你应该能够使用那篇文章中显示的方法来修改数据源。语法应该非常类似于使用命名区域而不是单元格区域。
6ioyuze23#
我结合了上面的两段代码,现在你可以用下面的代码来引用你的源数据,你所要做的就是把
*
符号替换成你的源数据,然后你就可以开始了。83qze16e4#
改编自Dynamically Change A Pivot Table's Data Source Range With This VBA Macro Code:
1.可以设置
[PivotTable](https://learn.microsoft.com/en-us/office/vba/api/Excel.PivotTable) . [SourceData](https://learn.microsoft.com/en-us/office/vba/api/Excel.PivotTable.SourceData)
属性,该属性通过ChangePivotCache
方法设置。1.要创建新的
PivotCache
,请调用[ActiveWorkbook](https://learn.microsoft.com/en-us/office/vba/api/Excel.Application.ActiveWorkbook) . [PivotCaches](https://learn.microsoft.com/en-us/office/vba/api/Excel.PivotCaches) . [Create](https://learn.microsoft.com/en-us/office/vba/api/excel.pivotcaches.create)
1.您需要传入一个
SourceType
和一个Range
作为SourceData
。1.最后,更新后,确保调用
RefreshTable
来应用更改。下面的示例将自动查找工作簿中的每个数据透视表并对其进行更新。
只需将
"Sheet1"
替换为数据源所在的位置。ncecgwcz5#
我只要把原始数据转换成表格,就可以解决所有问题