Не вижу смысла зацикливать по одной строке за раз.
Option Explicit
Sub CopyOver()
'Application.ScreenUpdating = False ' Uncomment when code is working.
Dim sourceSheet As Worksheet
Set sourceSheet = Application.Workbooks("Book1.xlsx").Worksheets("Sheet1")
Dim destinationSheet As Worksheet
Set destinationSheet = Application.Workbooks("Book2.xlsx").Worksheets("Sheet2")
Dim lastRowOnSourceSheet As Long
lastRowOnSourceSheet = sourceSheet.Cells(sourceSheet.Rows.Count, "A").End(xlUp).Row
Dim lastRowOnDestinationSheet As Long
lastRowOnDestinationSheet = destinationSheet.Cells(destinationSheet.Rows.Count, "A").End(xlUp).Row
If (lastRowOnDestinationSheet + 1 + lastRowOnSourceSheet) > destinationSheet.Rows.Count Then
MsgBox "There aren't enough rows in '" & destinationSheet.Name & "'. Nothing has been copy-pasted. Code will stop running now."
Exit Sub
End If
sourceSheet.Rows("1:" & lastRowOnSourceSheet).Copy
destinationSheet.Cells(lastRowOnDestinationSheet + 1, "A").PasteSpecial xlPasteValues
Application.CutCopyMode = False
'Application.ScreenUpdating = True ' Uncomment when code is working.
End Sub
Вы также можете пропустить буфер обмена и напрямую присвоить значение из одного диапазона другому.