For others like me, who have the same exception:
It can also happen if you try to pass a null value instead of Missing.Value (or Type.Missing)
e.g.
Worksheet worksheet = ...;
return worksheet.Range["A1", null]; //This call generates the error 0x800A03EC
return worksheet.Range["A1", Missing.Value]; //This works correctly