求助:编写VBA代码实现可变行数数据复制至Excel表格
VBA批量复制数据到表格的修正方案
核心需求
把「Daily Dashboard」工作表中M19:T区域的可变行数数据,复制到「Reporting Tool」的「ReportingLog」表格中,需先确定数据行数,再给表格添加对应行数后完成复制。
修正后的完整代码
Sub Dispatch_Report_Save() ' 用户确认弹窗 If MsgBox("警告:继续将在调度报告日志中添加新的日期条目,每天仅可使用一次。已保存后如需修改请使用更新按钮。是否继续?", vbYesNo) = vbNo Then Exit Sub Dim sh1 As Worksheet Dim sh2 As Worksheet Dim sourceLastRow As Long Dim rowCount As Long Dim tbl As ListObject Dim i As Long ' 绑定工作表和表格对象 Set sh1 = ActiveWorkbook.Sheets("Daily Dashboard") Set sh2 = ActiveWorkbook.Sheets("Reporting Tool") Set tbl = sh2.ListObjects("ReportingLog") ' 计算源数据的有效行数 sourceLastRow = sh1.Cells(sh1.Rows.Count, "M").End(xlUp).Row rowCount = sourceLastRow - 18 ' 从M19开始,总行数为最后行号减18 ' 无数据时直接退出 If rowCount <= 0 Then MsgBox "没有可复制的数据!" Exit Sub End If ' 给表格批量添加对应行数 For i = 1 To rowCount tbl.ListRows.Add Next i ' 复制数据到表格(避免用Select,直接定位范围更稳定) sh1.Range("M19:T" & sourceLastRow).Copy tbl.ListRows(tbl.ListRows.Count - rowCount + 1).Range.PasteSpecial Paste:=xlPasteValues ' 回到Daily Dashboard并定位到E6 sh1.Activate sh1.Range("E6").Select ' 成功提示 MsgBox "每日调度统计已保存。" End Sub
原代码问号处的问题说明
- 添加表格行的问号:
ListRows.Add默认一次只能添加1行,需要先算出源数据的行数rowCount,再通过循环批量添加对应行数。 - 复制范围的问号:原代码用
Select容易因工作表切换出错,直接通过Range("M19:T" & sourceLastRow)定位源数据范围,再粘贴到表格的新行区域即可。
内容的提问来源于stack exchange,提问作者Zackary Chairvolotti
相关产品推荐
相关产品推荐

