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

Excel VBA求助:获取所有工作表L列最后值并解决编译错误

提取多工作表指定列最后汇总值的VBA解决方案

你的场景是:拥有100+格式统一的Excel工作表,每个表L列最后一个单元格为该列汇总值,已通过VBA在「Home Sheet」的B列列出所有工作表名称,现在需要在C列提取对应表的L列汇总值,但原代码出现编译错误。

以下是修正后的可运行代码,同时规避常见编译错误:

' 模块顶部添加该行,强制变量声明,避免未定义变量导致的编译错误
Option Explicit

Sub GetSheetLColumnTotal()
    Dim wsSummary As Worksheet
    Dim targetWs As Worksheet
    Dim lastSummaryRow As Long
    Dim rowIndex As Long
    
    ' 明确指定汇总工作表,避免依赖ActiveSheet引发的错误
    Set wsSummary = ThisWorkbook.Sheets("Home Sheet")
    
    ' 获取汇总表中工作表名称数据的最后行号
    lastSummaryRow = wsSummary.Cells(Rows.Count, "B").End(xlUp).Row
    
    ' 设置C列表头
    With wsSummary.Cells(1, "C")
        .Value = "L列汇总值"
        .Font.Bold = True
    End With
    
    ' 从第2行开始遍历(跳过表头)
    For rowIndex = 2 To lastSummaryRow
        ' 尝试获取对应名称的工作表,处理名称不存在的情况
        On Error Resume Next
        Set targetWs = ThisWorkbook.Sheets(wsSummary.Cells(rowIndex, "B").Value)
        On Error GoTo 0
        
        If Not targetWs Is Nothing Then
            ' 提取目标工作表L列最后一个非空单元格的值
            wsSummary.Cells(rowIndex, "C").Value = targetWs.Cells(targetWs.Rows.Count, "L").End(xlUp).Value
        Else
            ' 标记无效工作表名称
            wsSummary.Cells(rowIndex, "C").Value = "无效表名"
        End If
    Next rowIndex
    
    ' 自动调整C列宽度
    wsSummary.Columns("C").AutoFit
End Sub

常见编译错误原因及解决:

  • 未声明变量:原代码中i未声明,添加Option Explicit在模块顶部可强制变量声明,提前发现此类错误
  • 依赖ActiveSheet:运行代码时若激活的不是「Home Sheet」,会导致数据写入错误,代码中直接指定工作表对象可避免
  • 工作表名称不匹配:汇总表中若存在错误的工作表名称,代码通过错误处理标记异常,避免程序崩溃

内容的提问来源于stack exchange,提问作者Prabhat Vishwas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:42:32