将列单元格从活动行复制到新行
Posted
技术标签:
【中文标题】将列单元格从活动行复制到新行【英文标题】:Copy column cells from active row to new row 【发布时间】:2019-07-19 15:48:59 【问题描述】:我需要在活动单元格下方添加一行,然后将活动行中 E-J 列的单元格复制到新插入的行。
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
我认为问题在于插入新行后选择单元格范围。
【问题讨论】:
插入后删除所有其他行并用这一行替换它们:Range(Cells(ActiveCell.Row, "E"), Cells(ActiveCell.Row, "J")).Copy Cells(ActiveCell.Offset(1).Row, "E")
【参考方案1】:
其中一个问题可能是您不能为 Range
函数提供超过 2 个参数。
此外,您通常希望避免在代码运行时依赖工作表或范围处于活动状态(因为 ActiveSheet
或 ActiveCell
可能会更改,这可能会使您的代码行为不可预测/不可靠)。
Intersect
是一个函数,它将返回其所有参数共享的范围。在这种情况下,它返回范围 columns E to J
和范围 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
我确实测试了代码,它似乎做了你描述的事情(即从选定的行复制并粘贴到它下面新插入的行)。
【讨论】:
以上是关于将列单元格从活动行复制到新行的主要内容,如果未能解决你的问题,请参考以下文章
在 Excel 中将某些特定单元格从一个工作表复制到另一个工作表的 VBA 可能是啥?