如何用VBA逐行复制数据至另一工作表并完成后弹窗提示?
Excel VBA 逐行跨工作表复制数据问题求助
需要实现从源Excel工作表逐行复制数据到目标工作表:复制源表第一行数据后粘贴到目标表,接着复制源表第二行并粘贴到目标表的下一个空行,以此循环直到源表所有数据行处理完毕,处理完成后弹出提示框告知用户。
当前使用的VBA代码无法实现上述逐行循环的需求,代码如下:
Sub InsertData() Dim wsCopy As Worksheet, wsDest As Worksheet Dim lCopyLastRow As Long, lDestLastRow As Long 'Set variables for copy and destination sheets Set wsCopy = Workbooks("Warranty Template.xlsm").Worksheets("PivotTable") Set wsDest = Workbooks("QA Matrix Template.xlsm").Worksheets("Plant Sheet") '1. Find last used row in the copy range based on data in column A lCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, 1).End(xlUp).Row '2. Find first blank row in the destination range based on data in column A 'Offset property moves down 1 row lDestLastRow = wsDest.Cells(wsDest.Rows.Count, 4).End(xlUp).Offset(1,0).Row '3. Copy & Paste Data wsCopy.Range("A5:A" & lCopyLastRow).Copy _ wsDest.Range("D" & lDestLastRow) End Sub
问题分析
原代码是一次性将源表A列从第5行到最后一行的数据批量粘贴到目标表D列的第一个空行,没有实现逐行复制粘贴的逻辑,也缺少完成提示。
修正后的代码
以下代码实现逐行循环复制,每次粘贴到目标表的下一个空行,完成后弹出提示:
Sub InsertDataRowByRow() Dim wsCopy As Worksheet, wsDest As Worksheet Dim copyRow As Long, lastCopyRow As Long Dim destRow As Long '指定源表和目标表 Set wsCopy = Workbooks("Warranty Template.xlsm").Worksheets("PivotTable") Set wsDest = Workbooks("QA Matrix Template.xlsm").Worksheets("Plant Sheet") '获取源表A列最后一行数据行号(从第5行开始) lastCopyRow = wsCopy.Cells(wsCopy.Rows.Count, 1).End(xlUp).Row '逐行循环处理 For copyRow = 5 To lastCopyRow '找到目标表D列的下一个空行 destRow = wsDest.Cells(wsDest.Rows.Count, 4).End(xlUp).Offset(1, 0).Row '复制源表当前行的A列数据到目标表D列的空行 wsCopy.Range("A" & copyRow).Copy wsDest.Range("D" & destRow) '如果需要复制整行(不是仅A列),替换上面一行为: 'wsCopy.Rows(copyRow).Copy wsDest.Rows(destRow) Next copyRow '弹出完成提示 MsgBox "数据逐行复制完成!", vbInformation, "操作完成" End Sub
代码说明
- 用
For...Next循环实现逐行遍历源表数据行(从第5行到最后一行) - 每次循环都重新获取目标表D列的下一个空行,避免因粘贴后行号变化导致错误
- 最后通过
MsgBox弹出完成提示 - 如果需要复制整行数据而非仅A列,可注释掉单列复制的代码,启用整行复制的语句
内容的提问来源于stack exchange,提问作者shakeel ahmad
相关产品推荐
相关产品推荐

