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

Excel VBA实现多工作表行依次复制到首表汇总报错如何解决?

VBA多工作表汇总代码修复方案

原代码核心错误点

  • 语法属性调用错误:lastRow赋值行报错的直接原因是你错误调用了不存在的.rw属性,单元格行号的正确属性为.Row
  • 变量拼写混乱:声明的变量为pae,实际循环用pge;未声明ws1就直接调用,变量未初始化
  • 缺少强制变量声明:未加Option Explicit时,VBA会自动为拼写错误的变量创建变体类型,不会触发声明类报错,看起来像跳过了声明步骤
  • 数据类型错误:Integer最大仅支持32767的数值,行数统计超过该值会溢出,应该用Long类型
  • 循环逻辑完全颠倒:需求是将其他工作表内容复制到第一个汇总表,原代码逻辑是将汇总表内容复制到其他工作表
  • 未初始化工作表数组、未指定汇总目标表、未动态计算粘贴起始位置
  • 没有跳过表头的逻辑处理

修复后可运行代码

Option Explicit ' 强制变量声明,拼写错误会直接报错,方便调试

Sub 汇总多表数据()
    Dim 汇总表 As Worksheet
    Dim 当前表 As Worksheet
    Dim 当前表最后行 As Long
    Dim 汇总表粘贴行 As Long
    Dim i As Integer
    
    ' 设定第一个工作表为汇总表
    Set 汇总表 = ThisWorkbook.Worksheets(1)
    ' 汇总表初始粘贴行:表头在第1行的话从第2行开始贴,保留汇总表表头
    汇总表粘贴行 = 汇总表.Cells(汇总表.Rows.Count, "A").End(xlUp).Row + 1
    
    ' 遍历第2个到第11个工作表(共10个表,按需调整结束数值)
    For i = 2 To 11
        Set 当前表 = ThisWorkbook.Worksheets(i)
        ' 统计当前表A列最后有数据的行
        当前表最后行 = 当前表.Cells(当前表.Rows.Count, "A").End(xlUp).Row
        ' 跳过表头(第1行),复制所有数据行到汇总表
        If 当前表最后行 >= 2 Then ' 避免空表报错
            当前表.Range("A2", 当前表.Cells(当前表最后行, 当前表.UsedRange.Columns.Count)).Copy _
                汇总表.Range("A" & 汇总表粘贴行)
            ' 更新下一次的粘贴起始行
            汇总表粘贴行 = 汇总表粘贴行 + 当前表最后行 - 1
        End If
    Next i
    
    ' 清空剪贴板,提示完成
    Application.CutCopyMode = False
    MsgBox "汇总完成,共汇总" & 汇总表粘贴行 - 2 & "行数据", vbInformation
End Sub

代码使用说明

  • 如果你的工作表表头不在第1行,自行修改A2为对应表头行的下一行
  • 如果需要汇总的工作表数量不是10个,调整For i = 2 To 11的结束数值即可
  • 代码默认用A列判断最后有效行,如果A列有空值可以换成其他有完整数据的列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:15:01