Excel VBA数据迁移问题:从DE WB复制有效行至MWB避免签名行
数据迁移VBA代码修复:仅复制DE WB中1-10行的有效数据
我有一个数据录入工作簿(DE WB),需要把里面的数据迁移到主工作簿(MWB)。DE WB的数据行是1-10行,后面跟着签名行;MWB是递增式列表,最后一条记录下面没有其他内容。
当前代码无法正常传输数据:如果把源行改成仅“A”,虽然能复制,但会连带复制签名行。希望实现仅复制1-10行中有内容的行。
原代码:
Set wsCopy = ActiveWorkbook.Worksheets("Sheet1") Set wsDest = Workbooks("Orders Log TEST.xlsx").Worksheets("FL") lCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "A10").End(xlUp).Row lDestLastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1).Row wsCopy.Range("A2:U" & lCopyLastRow).Copy _ wsDest.Range("A" & lDestLastRow)
问题分析
- 列参数写法错误:
Cells(wsCopy.Rows.Count, "A10")中的列标识应为单个列字母(如"A")或列号,"A10"是单元格地址,会导致无法正确定位最后一行。 - 未限制复制范围:原代码会从找到的最后一行向上取数据,包含了后续的签名行,超出了1-10行的有效数据范围。
修改后的代码
Sub CopyValidData() Dim wsCopy As Worksheet Dim wsDest As Worksheet Dim lCopyLastRow As Long Dim lDestLastRow As Long ' 定义源表和目标表 Set wsCopy = ActiveWorkbook.Worksheets("Sheet1") Set wsDest = Workbooks("Orders Log TEST.xlsx").Worksheets("FL") ' 在A列的第2-11行(对应10行数据,假设第1行是表头)内找最后一个非空行 On Error Resume Next lCopyLastRow = wsCopy.Range("A2:A11").Find(What:="*", SearchDirection:=xlPrevious).Row On Error GoTo 0 ' 如果没有有效数据,直接退出 If lCopyLastRow = 0 Then Exit Sub ' 定位目标表的插入起始行 lDestLastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1).Row ' 复制有效数据到目标表 wsCopy.Range("A2:U" & lCopyLastRow).Copy wsDest.Range("A" & lDestLastRow) End Sub
关键说明
- 限定搜索范围在
A2:A11(若你的数据行从第1行开始,改为A1:A10),确保只在10行有效数据内查找,不会包含签名行。 - 加入错误处理,避免因无数据导致代码报错。
- 精准定位有内容的最后一行,只复制有效数据行。
内容的提问来源于stack exchange,提问作者Jenn2483
相关产品推荐
相关产品推荐

