n is a number, so you must be aware of what you do.
suppose n=7. Do you want the 7nd worksheet(= worksheets(7))or do you want the worksheet with the name "7"(=worksheets("7")).
So if it's numeric (and integer), excel thinks it's an indexnumber, if it's as string, then it's a name.
By using cstr(n), you translate the integer 7 into a string.
So excel doesn't have to choose and perhaps making a wrong choose.