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
相关产品推荐
相关产品推荐

