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

基于输入次数将最后一行数据复制为多行的VBA代码修改求助

修正后的VBA代码及问题说明

原代码的核心问题是粘贴目标行的计算逻辑错误,导致每次粘贴的位置跳跃甚至重叠,同时存在工作表引用不统一的问题。以下是修正后的代码:

Sub CopyDataFromLastRowAndPaste()
    Dim ws As Worksheet
    Dim originalLastRow As Long
    Dim copyRange As Range
    Dim numCopies As Integer
    Dim i As Integer

    ' 明确指定目标工作表,避免依赖ActiveSheet
    Set ws = ThisWorkbook.Sheets("Sheet1")

    ' 获取初始最后一行行号(使用指定的ws,而非ActiveSheet)
    originalLastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    MsgBox "初始最后一行: " & originalLastRow
    
    ' 获取需要复制的次数,增加输入合法性判断
    numCopies = InputBox("Enter the number of copies to make:")
    If numCopies < 1 Then
        MsgBox "请输入大于0的整数"
        Exit Sub
    End If

    ' 设置要复制的范围(最后一行整行)
    Set copyRange = ws.Rows(originalLastRow)

    ' 循环复制粘贴到初始最后一行的下方
    For i = 1 To numCopies
        ' 每次粘贴到originalLastRow + i的位置,确保连续向下粘贴
        copyRange.Copy
        ws.Rows(originalLastRow + i).PasteSpecial Paste:=xlPasteValues
    Next i

    Application.CutCopyMode = False
    MsgBox "数据已成功复制到最后一行下方。"
End Sub

关键修改点:

  • 统一工作表引用:将ActiveSheet替换为已指定的ws,避免因当前激活工作表不同导致的错误。
  • 固定初始最后一行:用originalLastRow保存初始的最后一行行号,循环中不再修改这个值,确保每次粘贴的位置是originalLastRow + i,实现连续向下粘贴。
  • 增加输入合法性判断:避免用户输入非正整数导致的错误。
  • 简化粘贴位置逻辑:直接基于初始最后一行计算每次的目标行,逻辑更清晰,不会出现行号跳跃或重叠的问题。

如果想要更高效的实现(避免循环复制粘贴),可以用批量插入行后一次性填充的方式:

Sub CopyLastRowBatch()
    Dim ws As Worksheet
    Dim originalLastRow As Long
    Dim numCopies As Integer

    Set ws = ThisWorkbook.Sheets("Sheet1")
    originalLastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    
    numCopies = InputBox("Enter the number of copies to make:")
    If numCopies < 1 Then
        MsgBox "请输入大于0的整数"
        Exit Sub
    End If

    ' 批量插入需要的行数
    ws.Rows(originalLastRow + 1 & ":" & originalLastRow + numCopies).Insert Shift:=xlDown
    ' 将原最后一行的值批量填充到插入的行中
    ws.Rows(originalLastRow).Copy
    ws.Rows(originalLastRow + 1 & ":" & originalLastRow + numCopies).PasteSpecial Paste:=xlPasteValues

    Application.CutCopyMode = False
    MsgBox "数据已批量复制完成。"
End Sub

这种方式减少了循环次数,在需要复制大量行时效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:52:45