我正在MS Office 365 ProPlus中使用Excel版本1902,内部版本11328.20392。
我从工作表中的单元格调用函数:
=addOnlyPositiveValues(D2, E2, F2,G2)
只有第一个参数是必需的,其他是可选的:
Function addOnlyPositiveValues(v01 As Range, Optional v02 As Range, Optional v03 As Range, Optional v04 As Range, Optional v05 As Range ) As Double
Dim dblRet As Double
dblRet = 0
dblRet = var2dbl_positiveOnly(v01.Value)
If Not (IsMissing(v02)) Then dblRet = dblRet + var2dbl_positiveOnly(CVar(v02.Value))
If Not (IsMissing(v03)) Then dblRet = dblRet + var2dbl_positiveOnly(CVar(v03.Value))
If Not (IsMissing(v04)) Then dblRet = dblRet + var2dbl_positiveOnly(CVar(v04.Value))
If Not (IsMissing(v05)) Then dblRet = dblRet + var2dbl_positiveOnly(CVar(v05.Value))
' If Not (IsMissing(v05) Or (v05 Is Nothing)) Then dblRet = dblRet + var2dbl_positiveOnly(CVar(v05.Value))
addOnlyPositiveValues = dblRet
End Function
这一直有效直到最近(无法确切说明它何时开始起作用)。
在上面的示例中,我没有设置第5个参数。
我希望函数跳过If Not (IsMissing(v05)) Then ...
,但事实并非如此!逐步查看代码,我发现v05
是NOTHING
。
除我的解决方法外,其他人是否都遇到过同样的问题,并且可能有解决方案:
If Not (IsMissing(v05) Or (v05 Is Nothing)) Then ...
...还是我做错了什么?
答案 0 :(得分:5)
Optional
参数only在声明为Variant
时才有意义。只有Variant
可以包含Variant/Missing
函数检测到的特殊值IsMissing
。
您的参数是Range
,因此,如果不填写,它们将包含Nothing
,并且IsMissing
永远都是False
。
该代码永远无法与IsMissing
一起使用。如果确实如此,则将参数显式(Variant
或隐式(通过完全省略类型)声明为As Variant
。