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

