You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何自动更改工作簿各工作表数据透视表的数据源范围?

问题分析与修正方案

原代码存在几个关键问题:

  • 变量名不统一:定义了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:30:41