This is because when the code is run, Worksheets(1) is active, so Range("A1").End(xlDown) means a cell on Worksheets(1), so
Worksheets(2).Range("A1", <cell on Worksheets(1)>)
causes an error.
Write code that is independent of the active sheet, e.g.
Code:
Set namesRange = Worksheets(1).Range("A2", Worksheets(1).Range("A2").End(xlDown))
Set tasksRange = Worksheets(2).Range("A1", Worksheets(2).Range("A1").End(xlDown))