请求协助:将数据透视表数据源从旧文件切换至新工作簿表格
更换数据透视表数据源至新工作簿表格的VBA解决方案
你的代码存在几个关键问题,导致无法正确切换数据源,以下是修正后的实现方案:
问题点说明
Application.Range(Europe)中的Europe是命名区域名称,必须用双引号包裹,否则会被识别为未定义变量SourceData:="MyData"直接传入字符串"MyData"无效,应该引用ListObject对象的Range属性- 如果新数据源在另一个工作簿,不能依赖
ActiveWorkbook,需要明确指定工作簿对象
修正后的代码(数据源在当前工作簿)
Dim pt As PivotTable Dim MyData As Excel.ListObject ' 引用当前工作簿中名为"Europe"的命名区域对应的表格 Set MyData = ThisWorkbook.Range("Europe").ListObject ' 遍历指定工作表的所有数据透视表,逐个更换数据源 For Each pt In ThisWorkbook.Worksheets("Chart - City").PivotTables ' 创建新的数据透视缓存并关联到数据透视表 Set pt.PivotCache = ThisWorkbook.PivotCaches.Create( _ SourceType:=xlDatabase, _ SourceData:=MyData.Range _ ) ' 刷新数据透视表确保生效 pt.RefreshTable Next pt
数据源在外部工作簿的情况
如果新表格在另一个已打开的工作簿(比如名为新数据文件.xlsx),代码调整为:
Dim pt As PivotTable Dim MyData As Excel.ListObject Dim sourceWB As Workbook ' 指定数据源所在的工作簿 Set sourceWB = Workbooks("新数据文件.xlsx") ' 引用外部工作簿中目标表格(假设表格在"数据"工作表,名称为"Table_Europe") Set MyData = sourceWB.Worksheets("数据").ListObjects("Table_Europe") For Each pt In ThisWorkbook.Worksheets("Chart - City").PivotTables Set pt.PivotCache = ThisWorkbook.PivotCaches.Create( _ SourceType:=xlDatabase, _ SourceData:=MyData.Range _ ) pt.RefreshTable Next pt
关键注意事项
- 确保目标命名区域/表格存在,拼写完全一致
- 如果外部工作簿未打开,需要先通过
Workbooks.Open("文件路径")打开再引用 - 更换缓存后必须调用
RefreshTable确保数据透视表更新
内容的提问来源于stack exchange,提问作者HelpMe
相关产品推荐
相关产品推荐

