Excel VBA函数IsMissing不再起作用?

时间:2019-11-14 09:29:04

标签: excel vba

我正在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 ...,但事实并非如此!逐步查看代码,我发现v05NOTHING

除我的解决方法外,其他人是否都遇到过同样的问题,并且可能有解决方案:

If Not (IsMissing(v05) Or (v05 Is Nothing)) Then ...

...还是我做错了什么?

1 个答案:

答案 0 :(得分:5)

Optional参数only在声明为Variant时才有意义。只有Variant可以包含Variant/Missing函数检测到的特殊值IsMissing

您的参数是Range,因此,如果不填写,它们将包含Nothing,并且IsMissing永远都是False

该代码永远无法与IsMissing一起使用。如果确实如此,则将参数显式(Variant或隐式(通过完全省略类型)声明为As Variant