2009-11-02 81 views

回答

59

使用IsMissing

If IsMissing(arg) Then 
    MsgBox "Parameter arg not passed" 
End If 

但是,如果我没有记错,这并没有给工作时这是参数的默认值,在任何情况下它都会使用默认参数而非冗余。

+16

另外,我认为IsMissing只适用于参数被声明为变体 – 2009-11-03 15:24:44

+3

@Jon:true,因为'IsMissing'是通过'VARIANT'结构体(IIRC,'VT_EMPTY')中的一个标志来实现的。我没有提到这个,因为OP的问题已经使用了'Variant'。 – 2009-11-03 17:38:12

4

如果ISMISSING(ARG)则...

9

您可以使用IsMissing()函数。但是这个只适用于Variant数据类型。

2

如果您使用字符串或数字变量,您可以检查变量的值。例如:

Function func (Optional Str as String, Optional Num as Integer) 

If Str = "" Then 
    MsgBox "NOT SENT" 
End If 

If Num = 0 Then 
    MsgBox "NOT SENT" 
End If 

End Function 

这允许您使用非变量变量。

+0

虽然它不能区分完全有效的用法:'func(“”,0)'会错误地标记未设置的参数。一般来说,没有办法可以在不使用“变体”的情况下进行区分。 – 2016-08-23 10:21:19

+0

@KonradRudolph这是一个很好的观点。在某种情况下,你可能想要确保你没有使用它,你可能会发送一个空字符串或零个数字。 – OSUZorba 2016-08-29 05:21:18

2

您可以使用类似:

function func(optional vNum as integer:=&HFFFF) '&HFFFF value that is NEVER set on vNum 

If vNum = &HFFFF Then 
    MsgBox "NOT SENT" 
End If 

End Function 
1

具有一个变体我会用NZ功能:

Function func (Optional ByRef arg As Variant = Nothing) 
    If nz (arg, 0) = 0 Then 
     MsgBox "NOT SENT" 
    End If 
End Function 

,可以与其他数据类型一起使用过,只要记住即零计数为空或零长度,所以nz(0,"")仍然返回0.

相关问题