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

求助:编写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

原代码问号处的问题说明

  1. 添加表格行的问号:ListRows.Add默认一次只能添加1行,需要先算出源数据的行数rowCount,再通过循环批量添加对应行数。
  2. 复制范围的问号:原代码用Select容易因工作表切换出错,直接通过Range("M19:T" & sourceLastRow)定位源数据范围,再粘贴到表格的新行区域即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:37:45