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.