The main reason I suggest not using the TransferSpreadsheet method is because of possible problems with the method's range parameter. Yes, you can set a range to cover all of the columns you need: for all of A - L : "A1:L65536". If the destination table has a Primary Key relationship setup, it should ignore all of the blank rows between the last real row and 65536... but there's also a possibility that it won't ignore them.
When creating a recordset from a worksheet, it automatically discounts any blank rows, which leaves you with nothing more than the data you're actually wanted, as defined by the SQL expression that's a part of the recordset's Open method. It just seems a lot cleaner and more acurate to me. also, I haven't found any appreciable difference in importing speed when comparing TransferSpreadsheet with a connection's Execute method.
So it all really comes down to personal preference, I think, since I haven't seen either method touted as 'best practice.'
Feel free to disagree with me. As the wise House, MD. says: "through conflict comes creativity."