求助:如何自动更改工作簿各工作表数据透视表的数据源范围?
问题分析与修正方案
原代码存在几个关键问题:
- 变量名不统一:定义了
LastRow但使用了未声明的Ultima_fila,导致编译错误。 - 未指定数据源工作表:获取最后一行时默认用当前激活表,应该明确指向'DATA'工作表。
- 对象类型错误:遍历
ListObjects(结构化表格),但实际要处理的是PivotTables(数据透视表)。 - 数据源设置方式错误:数据透视表的数据源需要通过
ChangePivotCache方法更新,而非用Resize操作表格。
修正后的代码
Sub ActualizarFuenteTD() Dim ws As Worksheet Dim pvt As PivotTable Dim datosSheet As Worksheet Dim nuevoRango As Range Dim ultimaFila As Long ' 指定数据源工作表 Set datosSheet = ThisWorkbook.Worksheets("DATA") ' 获取DATA表中第3列(C列)最后一行的行号 ultimaFila = datosSheet.Cells(datosSheet.Rows.Count, 3).End(xlUp).Row ' 定义新的数据源范围:B8到O列最后一行 Set nuevoRango = datosSheet.Range("B8:O" & ultimaFila) ' 遍历所有工作表 For Each ws In ThisWorkbook.Worksheets ' 遍历当前工作表中的所有数据透视表 For Each pvt In ws.PivotTables ' 更新数据透视表的缓存数据源 pvt.ChangePivotCache ThisWorkbook.PivotCaches.Create( _ SourceType:=xlDatabase, _ SourceData:=nuevoRango) ' 刷新数据透视表 pvt.RefreshTable Next pvt Next ws End Sub
代码说明
- 明确指定
DATA工作表,避免激活表切换导致的错误。 - 使用
Long类型存储行号(Excel行号超过Integer上限时不会溢出)。 - 遍历
PivotTables对象,针对数据透视表操作。 - 通过
ChangePivotCache重新创建缓存并绑定新数据源,确保范围更新生效。 - 最后调用
RefreshTable刷新数据透视表内容。
内容的提问来源于stack exchange,提问作者SergioSData
相关产品推荐
相关产品推荐

