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

VBA脚本问题:复制数据至另一工作表首空白行而非对应行

问题分析与解决方案

你的问题核心是粘贴位置直接绑定了源工作表的循环行号r,而非动态获取目标工作表的首空白行位置。原代码中rgPaste等对象均通过& r指定行号,导致源第N行的数据必然对应目标第N行,完全忽略了目标工作表的实际空白行分布。


修改后的代码

Option Explicit

Sub Übertragen()
    Dim wbSource As Workbook
    Dim wsSource As Worksheet
    Dim wbTarget As Workbook
    Dim wsTarget As Worksheet
    Dim lastRowSource As Long
    Dim currentTargetRow As Long
    Dim r As Long
    
    ' 绑定工作簿与工作表对象,简化重复引用
    Set wbSource = Workbooks("A1")
    Set wsSource = wbSource.Worksheets("A2")
    Set wbTarget = Workbooks("B1")
    Set wsTarget = wbTarget.Worksheets("B2")
    
    ' 获取源数据表最后一行
    lastRowSource = wsSource.Range("A" & wsSource.Rows.Count).End(xlUp).Row
    ' 获取目标表当前首空白行(从A列判断)
    currentTargetRow = wsTarget.Range("A" & wsTarget.Rows.Count).End(xlUp).Row + 1
    
    For r = 2 To lastRowSource
        With wsSource
            If .Range("I" & r).Value Like "eingegangen*" And .Cells(r, "S").Value <> 1 Then
                ' 标记该行已处理
                .Cells(r, "S").Value = 1
                
                ' 直接赋值替代复制粘贴,提升运行效率
                wsTarget.Cells(currentTargetRow, "G").Value = .Range("D" & r).Value
                wsTarget.Cells(currentTargetRow, "I").Value = .Range("E" & r).Value
                wsTarget.Cells(currentTargetRow, "L").Value = .Range("F" & r).Value
                wsTarget.Cells(currentTargetRow, "J").Value = .Range("H" & r).Value
                
                ' 填写固定字段内容
                wsTarget.Cells(currentTargetRow, "B").Value = Date
                wsTarget.Cells(currentTargetRow, "C").Value = "status"
                wsTarget.Cells(currentTargetRow, "E").Value = "company name"
                
                ' 目标行号递增,确保下一条数据粘贴到新空白行
                currentTargetRow = currentTargetRow + 1
            End If
        End With
    Next r
End Sub

关键修改说明

  • 动态目标行管理:新增currentTargetRow变量,初始化为目标表首空白行,每次粘贴后自动递增,彻底摆脱源行号的绑定。
  • 对象绑定优化:将工作簿、工作表赋值给变量,避免重复书写长路径引用,提升代码可读性与运行效率。
  • 替换复制粘贴:直接通过Value属性赋值,替代剪贴板操作,既避免了剪贴板占用问题,又大幅提升运行速度。
  • 强制变量声明:添加Option Explicit,强制所有变量必须声明,避免因变量名拼写错误导致的隐性bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:53:29