以下代码尝试将所选范围(传递为rng
)粘贴到工作表的末尾。
如果已经存在2行(A1,A2),则它可以工作。
Sub copyRow(rng As Range, ws As Worksheet)
Dim newRange As Range
Set newRange = ws.Range("A1").End(xlDown).Offset(1, 0)
rng.Copy
newRange.PasteSpecial (xlPasteAll)
End Sub
因此,如果存在A1和A2,并且如果您将此方法调用100次,则会在其后插入100行。但是,如果没有行或只有A1,它只会覆盖A2。我可以看到excel写在同一行(覆盖)
看来,如果行数少于2行,xlDown如何计算,不确定。
任何帮助都将不胜感激。
答案 0 :(得分:34)
很抱歉,但我不同意Michael的回答。
结束(xlDown)是VBA,相当于点击Ctrl
+ Down
。
使用
尝试Ctrl
+ Down
这会让您了解所有不同的行,Ctrl
+ Down
可能会将您带到。
Set newRange = ws.Range("A1").End(xlDown).End(xlDown).End(xlUp).Offset(1, 0)
并不一定会将您带到最后使用的行加1。
我很惊讶Set newRange = ws.Range("A1").End(xlDown).Offset(1, 0)
使用空列。 Range("A1").End(xlDown)
会将您带到表格的最下一行,然后.Offset(1, 0)
会尝试将您从表格中删除。
考虑:
Dim RowLast As Long
RowLast = ws.Cells(Rows.Count, "A").End(xlUp).Row
我假设你没有borrom行中的值。如果您不关心第1行是否为空,并且空列,则:
RowLast = ws.Cells(Rows.Count, "A").End(xlUp).Row
Set NewRange = ws.Cells(RowLast + 1, "A")
无论纸张的当前内容如何,都应该给出所需的结果。
如果您确实将第1行留空,请尝试Ctrl
+ Down
和Ctrl
+ Up
,以便了解不同组合的效果价值观。