In VB5, you can assign a default value to a typed optional argument. But you must then use the IsMissing function carefully, because when the optional argument is typed, IsMissing always returns False. Only when using an untyped (Variant) optional argument will IsMissing be accurate in determining whether a value was passed. If no default value is assigned and the argument is typed, VB automatically assigns the default value normally assigned to such a type-typically 0 or an empty string.
Under this condition, you shouldn’t use IsMissing to detect whether the argument has been set. You can detect it with two methods. The first method is to not give the argument a type when you declare, so you can use the IsMissing function to detect it. The second method is to give a default value when you declare, but you won’t have to set that value when you call it. This code gives some examples about using optional arguments and the IsMissing function:
Private Sub fun1(..., Optional nVal) '- Without type (Variant) ... If IsMissing(nVal) Then '- You can use IsMissing here Else End If End Sub Private Sub fun2(..., Optional nVal As Integer) '- With type but no default value ... If IsMissing(nVal) Then '- You cannot use IsMissing here to detect is '- nVal been set, always return true '- VB will give nVal a default value 0 because '- its type is Integer End If End Sub Private Sub fun3(..., Optional nVal As Integer = -1) If nVal = -1 Then '- You can use this to detect , in function equals to '- IsMissing '- But you must sure the the value -1 will not be '- used when the procedure is called Else End If End Sub