The code below is trying to paste the selected range (passed as rng
) to the end of the worksheet.
It works if there are two rows already present (A1, A2
Sorry but I do not agree with Michael's answer.
End(xlDown) is the VBA equivalent of clicking Ctrl
+Down
.
Try Ctrl
+Down
with
This will give you an idea of all the different rows, Ctrl
+Down
might take you to.
Set newRange = ws.Range("A1").End(xlDown).End(xlDown).End(xlUp).Offset(1, 0)
does not necessarily take you to the last used row plus 1.
I am surprised Set newRange = ws.Range("A1").End(xlDown).Offset(1, 0)
worked with an empty column. Range("A1").End(xlDown)
would take you to the bottom row of the sheet then .Offset(1, 0)
would try to take you off the sheet.
Consider:
Dim RowLast As Long
RowLast = ws.Cells(Rows.Count, "A").End(xlUp).Row
I assume you do not have values in the borrom rows. If you do not care if row 1 is left blank with an empty column, then:
RowLast = ws.Cells(Rows.Count, "A").End(xlUp).Row
Set NewRange = ws.Cells(RowLast + 1, "A")
should give the desired result regardless of the current contents of sheet ws.
If you do care about row 1 being left blank, experimenting with Ctrl
+Down
and Ctrl
+Up
will give you an understanding of the effect of different combinations of values.