Here's another thing i've found...
the value returned in the target cell is always what is in the "if_false" part of the "If" formula.
e.g. i've just changed the original code to:
Activecell.FormulaR1C1 = "=if(iserror(match(RC[+3],'Product Type'!A:A,0)),""123"",RC[+3])"
and "123" is...