将 Pivot table 源更改为不同的工作簿(基于单元格值)
Change a Pivot table Source to a different workbook (based on cell value)
我必须每周更新一个包含大约 15 个工作簿的数据库。
我想出的解决方案是用 pivot tables 排列数据(每个文件一个 pivot table),然后用 VBA 代码合并它们将数据复制到另一个工作簿(已经完成)。
问题是我需要手动更改所有这些文件的数据源,而且打开每个文件都需要时间,因为它们很重 (10mb)。
最好的代码是更改每个文件的源代码,查看另一个文件夹(4 月第 1、2、3、4 周 // 5 月第 1、2、3、4 周...)
示例文件 1:
来源 4 月第 3 周:'C:\ACreative\April[Coop.XLS]Sheet1'!$A$6:$BJ$30000
来源 4 月第 4 周:'C:\ACreative\April[Coop.XLS]Sheet1'!$A$6:$BJ$30000
来源 5 月第 1 周:'C:\ACreative\May[Coop.XLS]Sheet1'!$A$6:$BJ$30000
来源 5 月第 2 周:'C:\ACreative\May[Coop.XLS]Sheet1'!$A$6:$BJ$30000
示例文件 2:
来源 4 月第 3 周:'C:\ACreative\April[File2.XLS]Sheet1'!$A$6:$BJ$30000
来源 4 月第 4 周:'C:\ACreative\April[File2.XLS]Sheet1'!$A$6:$BJ$30000
来源 5 月第 1 周:'C:\ACreative\May[File2.XLS]Sheet1'!$A$6:$BJ$30000
来源 5 月第 2 周:'C:\ACreative\May[File2.XLS]Sheet1'!$A$6:$BJ$30000
我认为的一个解决方案是在单元格上编写 (\April\ ; \May),并根据 "path+cell value" 更新源代码,但我愿意另一个。
谢谢!!!
Macro Recorder是你的朋友。
只要您知道不同的数据源都将滑入有问题的枢轴 table,请尝试下面的 VBA 代码片段以在同一工作簿或其他工作簿之间快速切换范围。
Sub ChangeDataSource()
Dim DataSource As String
Dim Green As Long, Red As Long
Green = -11489280
Red = -16776961
On Error GoTo ErrHandle
DataSource = Range("DataSource").Value
ActiveSheet.PivotTables("PivotTable1").ChangePivotCache ActiveWorkbook. _
PivotCaches.Create(SourceType:=xlDatabase, SourceData:=DataSource, Version _
:=xlPivotTableVersion15)
Range("DataSource").Font.Color = Green
Range("CurrentDataSource").Value = DataSource
Calculate
GoTo Success
ErrHandle:
MsgBox ("DataSource is not valid.")
Range("DataSource").Font.Color = Red
Success:
End Sub
注意我在本地工作簿中使用了一些命名范围来辅助宏。我上传了 some sample files here 而不是上传屏幕截图,这样您就可以自己四处看看,而不是试图解释论坛上的静态图片 post。
希望对您有所帮助!
我必须每周更新一个包含大约 15 个工作簿的数据库。
我想出的解决方案是用 pivot tables 排列数据(每个文件一个 pivot table),然后用 VBA 代码合并它们将数据复制到另一个工作簿(已经完成)。
问题是我需要手动更改所有这些文件的数据源,而且打开每个文件都需要时间,因为它们很重 (10mb)。
最好的代码是更改每个文件的源代码,查看另一个文件夹(4 月第 1、2、3、4 周 // 5 月第 1、2、3、4 周...)
示例文件 1:
来源 4 月第 3 周:'C:\ACreative\April[Coop.XLS]Sheet1'!$A$6:$BJ$30000
来源 4 月第 4 周:'C:\ACreative\April[Coop.XLS]Sheet1'!$A$6:$BJ$30000
来源 5 月第 1 周:'C:\ACreative\May[Coop.XLS]Sheet1'!$A$6:$BJ$30000
来源 5 月第 2 周:'C:\ACreative\May[Coop.XLS]Sheet1'!$A$6:$BJ$30000
示例文件 2:
来源 4 月第 3 周:'C:\ACreative\April[File2.XLS]Sheet1'!$A$6:$BJ$30000
来源 4 月第 4 周:'C:\ACreative\April[File2.XLS]Sheet1'!$A$6:$BJ$30000
来源 5 月第 1 周:'C:\ACreative\May[File2.XLS]Sheet1'!$A$6:$BJ$30000
来源 5 月第 2 周:'C:\ACreative\May[File2.XLS]Sheet1'!$A$6:$BJ$30000
我认为的一个解决方案是在单元格上编写 (\April\ ; \May),并根据 "path+cell value" 更新源代码,但我愿意另一个。
谢谢!!!
Macro Recorder是你的朋友。
只要您知道不同的数据源都将滑入有问题的枢轴 table,请尝试下面的 VBA 代码片段以在同一工作簿或其他工作簿之间快速切换范围。
Sub ChangeDataSource()
Dim DataSource As String
Dim Green As Long, Red As Long
Green = -11489280
Red = -16776961
On Error GoTo ErrHandle
DataSource = Range("DataSource").Value
ActiveSheet.PivotTables("PivotTable1").ChangePivotCache ActiveWorkbook. _
PivotCaches.Create(SourceType:=xlDatabase, SourceData:=DataSource, Version _
:=xlPivotTableVersion15)
Range("DataSource").Font.Color = Green
Range("CurrentDataSource").Value = DataSource
Calculate
GoTo Success
ErrHandle:
MsgBox ("DataSource is not valid.")
Range("DataSource").Font.Color = Red
Success:
End Sub
注意我在本地工作簿中使用了一些命名范围来辅助宏。我上传了 some sample files here 而不是上传屏幕截图,这样您就可以自己四处看看,而不是试图解释论坛上的静态图片 post。
希望对您有所帮助!