【发布时间】:2018-05-11 09:04:48
【问题描述】:
我正在尝试创建一个 VBA 来更改同一数据文件和工作表中多个数据透视表中的数据源。 数据源位于另一个工作簿中,并且每周都会使用新数据进行更新。
“FY 18.xlsb” - 包含数据的工作簿
“数据” - 包含 whe 数据的“FY 18.xlsb”中的工作表
“数据透视表” - 活动工作簿中的工作表,其中可以找到应更新的数据透视表。
我希望 VBA 在数据工作表中找到终点,或者有一个可以选择数据范围的弹出窗口。
在“pt.ChangePivotCache pc”处的代码上运行调试时停止
任何人有任何想法可能是错的吗?或者有什么想法可以更新代码吗?
Sub AdjustPivotDataRange()
Dim pt As PivotTable, pc As PivotCache
Dim dataSheet As Worksheet, ws As Worksheet, wks As Worksheet
Dim StartPoint As Range, dataSource As Range, NewRange As String
' Datasource workbook and worksheet
Set wkb = Workbooks("FY 18.xlsb")
Set wks = wkb.Worksheets("Data")
' Worksheet
Set ws = ActiveWorkbook.Worksheets("Pivot Table")
' Dynamically retrieve range address of data
Set StartPoint = wks.Range("A1")
Set dataSource = wks.Range(StartPoint, StartPoint.SpecialCells(xlLastCell))
NewRange = wks.Name & "!" & dataSource.Address(ReferenceStyle:=xlR1C1)
' Create new PivotCache
Set pc = ThisWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=NewRange)
' Loop through all tables in worksheet
For Each pt In ws.PivotTables
' update pivot source and refresh
pt.ChangePivotCache pc
pt.RefreshTable
Next pt
End Sub
编辑: 做我想做的新代码!
Sub AdjustPivotDataRange()
Dim pt As PivotTable, pc As PivotCache
Dim dataSheet As Worksheet, ws As Worksheet, wks As Worksheet
Dim StartPoint As Range, dataSource As Range, NewRange As String
' Datasource workbook and worksheet
Set wkb = Workbooks("Nordics SQI - FY 19.xlsb")
Set wks = wkb.Worksheets("Data")
' Worksheet
Set ws = ActiveWorkbook.Worksheets("Pivot Table")
' Dynamically retrieve range address of data
Set dataSource = wks.Range("A1").CurrentRegion
' Loop through all tables in worksheet
For Each pt In ws.PivotTables
' update pivot source and refresh
pt.ChangePivotCache ThisWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=dataSource)
pt.RefreshTable
Next pt
End Sub
【问题讨论】:
-
如果所有这些 Pivot 共享完全相同的数据源,它们也都共享相同的 PivotCache。所以你只需要刷新一次缓存。此外,如果您的数据源是 Excel 表,您的 PivotCache 应该在刷新时获取任何新数据。这意味着您可能不需要任何此代码。
-
我遇到了一些问题。但会再看一遍。
-
试过了,工作了一次,今天我应该更新它不适用于 Excel 表的数据,我需要选择范围。虽然,我添加了一个切片器,这可以使不一样?
标签: vba excel pivot-table