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

Excel VBA需求:复制表格当前行并插入指定数量副本

Excel表格复制行并插入副本的VBA实现

需求与问题

  • 需求:在当前活动工作表的表格中,复制当前单元格所在整行内容(限定表格A:K列范围),并在该行下方插入对应数量的内容副本。
  • 问题:现有代码仅能插入指定行数的空行,无法自动填充原行内容;尝试其他代码时,要么仍插入空行,要么出现「粘贴空间不足」的错误。
  • 预期效果:选中表格目标行(表头为A3:AK),若设置复制5次,该行下方会新增5个与原行内容完全一致的副本(总计6行)。

现有仅插入空行的代码

Sub INSERIR_LINHAS()

Application.ScreenUpdating = False

    Dim Table As Object
    Dim Rows As Range
    Set Rows = Worksheets("CC").Range("B18") '要插入的行数
    Dim rng As Range
    Set rng = ActiveCell
    
If Rows = ("1") Then GoTo ErrHandler


Set Table = ActiveSheet.ListObjects(1)
With Table
    If Not Intersect(Selection, .DataBodyRange) Is Nothing Then
        rng.EntireRow.Offset(1).Resize(Rows.Value - 1).Insert Shift:=xlDown 'Rows需减1,因为当前行已存在
    End If
End With

Exit Sub

ErrHandler:
    Exit Sub

Application.ScreenUpdating = True


End Sub

优化后实现复制内容的代码

调整@Darren Bartrup-Cook的代码后,已实现需求,可在活动工作表和表格中正常运行:

Sub Test()

    Dim MyTable As Object
    Dim RowsToAdd As Long
    RowsToAdd = Worksheets("CC").Range("B18") '要插入的行数
    
    Set MyTable = ActiveSheet.ListObjects(1)
    
    If RowsToAdd > 0 Then
            If Not Intersect(Selection, MyTable.DataBodyRange) Is Nothing Then
            
            Dim SelectedRow As Long
            SelectedRow = Intersect(Selection, MyTable.DataBodyRange).Row - MyTable.HeaderRowRange.Row
            
            Dim RowCounter As Long
            For RowCounter = SelectedRow To SelectedRow + RowsToAdd - 1
                MyTable.ListRows.Add Position:=RowCounter + 1
                MyTable.ListRows(RowCounter).Range.Copy Destination:=MyTable.ListRows(RowCounter + 1).Range
            Next RowCounter
        End If
    End If

End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:50:43