a) can't see it either. How do you know that it is being set at all? Perhaps msgbox in the form load macro, i.e.
if not isnull(openargs) then
msgbox openargs
before gotorecord. If no msgbox, then the value is null. IIRC, brackets will cause Access to interpret the contents as a field. Unless you're talking about a field, I'd say it should be as I typed above sans brackets.
b) can only say, remove gotorecord New part as a start. I don't use macros as they're too limiting and that seems to be the case with most responders here. Perhaps they know the actions and steps to have a macro get the record id from one form and pass it on to another.
Last but maybe not least, not specifying the valueIfNull parameter means that Nz could return a 0, an empty string, or a Null. Not really a good idea to leave the decision up to Access, especially if you're going to test for a specific value or type.
The more we hear silence, the more we begin to think about our value in this universe.
Paraphrase of Professor Brian Cox.