首页 > 解决方案 > 将列单元格从活动行复制到新行

问题描述

我需要在活动单元格下方添加一行,然后将活动行中 EJ 列中的单元格复制到新插入的行。

Sub Addrow()
    
    ActiveCell.Offset(1).EntireRow.Insert
    
    Range(Cells(ActiveCell.Row, "E"), Cells(ActiveCell.Row, "F"), Cells(ActiveCell.Row, "G"), Cells(ActiveCell.Row, "H"), Cells(ActiveCell.Row, "I"), Cells(ActiveCell.Row, "J")).Select
    
    Selection.Copy
    Range(Cells(ActiveCell.Offset(1), "E")).Select
    ActiveSheet.Paste
        
End Sub

我相信问题是在插入新行后选择单元格范围。

标签: excelvba

解决方案


问题之一可能是您不能为函数提供超过 2 个参数Range

此外,您通常希望避免在代码运行时依赖工作表或范围处于活动状态(因为ActiveSheetorActiveCell可能会更改,这可能会使您的代码行为不可预测/不可靠)。

Intersect是一个函数,它将返回其所有参数共享的范围。columns E to J在这种情况下,它返回 range和 range共有的单元格row of the Active cell

Range.Copy接受一个Destination参数,因此您可以直接将目标范围传递给它。

Sub AddRow()

    Dim selectedCell As Range
    Set selectedCell = ActiveCell

    Dim parentSheet As Worksheet
    Set parentSheet = selectedCell.Parent

    selectedCell.Offset(1, 0).EntireRow.Insert xlShiftDown

    With Intersect(parentSheet.Range("E:J"), selectedCell.EntireRow)
        .Copy .Offset(1)
    End With

End Sub

我确实测试了代码,它似乎做了你所描述的(即从选定的行复制并粘贴到它下面新插入的行)。


推荐阅读