All data types can be Optional but only Variants can be correctly tested using the IsMissing() function. The IsMissing() function tests the Variant’s ‘Missing’ value and only Variants have a ‘Missing’ value.
When an argument is not supplied…
Except for Variants:
When declared as Optional they are initialized as per normal, numbers to 0, strings to zero length string and so forth.
Optional Variants are different in that they are not initialized, to Empty, as per normal but instead have their Missing value set to True. For an Optional Variant, Empty and Null are both False, only its Missing value is set to True.
The concept of an argument being un-typed is bogus. If the type of the argument is not declared it defaults to type Variant, as would normally be the case. If it is Optional it is then treated as a Variant as per above.
What I would recommend to anyone, including myself as I get a bit fuzzy on the matter after a while, is to open a new module and start testing by writing code.
Chris.