Actually the problematic part is Sheets("Sheet2").Range(Cells(lnRow + 3, 1)) and there are 2 issues with it.
1. Issue
For the Cells object there is not specified in which worksheet it is so VBA assumes ActiveSheet. It is the same as writing Sheets("Sheet2").Range(ActiveSheet.Cells(lnRow + 3, 1)).
Now if the active sheet is not Sheet2 then the code will fail because the Range object is not in the same sheet as the Cells object, and that is not allowed.
2. Issue
According to the documentation of the Worksheet.Range property it accepts 2 arguments Range(Cell1, Cell2) where the second is optional, but only if the first is an address string.
Cell1
- A String that is a range reference when one argument is used.
- Either a String that is a range reference or a Range object when two arguments are used.
So that means you can use the following syntax:
Range("Address")
Range("Address", "Address")
Range(Cells(row, column), Cells(row, column))
but you cannot use
Range(Cells(row, column))
because if only one argument is used it must be a string/address. Actually the last one does not exist because you then can use Cells directly without using Range: Cells(row, column)
So in your case that means you must use Cells directly:
Sheets("Sheet2").Cells(lnRow + 3, 1)
Cellsinstead like this:Destination:=Sheets("Sheet2").Cells(lnRow + 3, 1)