Excel VBA 检查数字是否为空:未按预期工作

Ans*_*Ans 3 excel vba

所以我编写了这个示例程序来理解更大程序中的类似问题。我有一个a As Variantb As Doublea等于Null,同时b等于零。然后我继续检查 是否abNull

Sub testNull()
    Dim a As Variant
    Dim b As Double

    a = Null
    b = 0

    If a = Null Then
        MsgBox (a & "null") 'doesn't print
    ElseIf a <> Null Then
        MsgBox (a & " not null") 'doesn't print
    Else
        MsgBox (b & " don't know") 'prints
    End If

    If b = Null Then
        MsgBox (b & "null") 'doesn't print
    ElseIf b <> Null Then
        MsgBox (b & " not null") 'doesn't print
    Else
        MsgBox (b & " don't know") 'prints
    End If

End Sub
Run Code Online (Sandbox Code Playgroud)

结果表明,虽然 excel 不认为ab是,但Null同时它也不认为其中任何一个不是Null

在这里进行检查的正确方法是什么?是什么原因导致这些问题?

Yow*_*E3K 5

测试任何内容Null(包括相等性测试Null = Null)都会返回Null,而不是TrueFalse

要检查 a Null,请使用该IsNull函数,例如

If IsNull(a) Then
    MsgBox "a is null"
Else
    '...
Run Code Online (Sandbox Code Playgroud)

  • 正如对此的阐述:VBA 无法将未知与任何事物进行比较(即使将其与未知本身进行比较)。因此,用“=”来比较未知的(NULL)和某些东西是不可能的。因此,有一个特殊的功能。也许在这个主题上也值得注意:将公式“=1/0”放入单元格“A1”并将其复制到单元格“B1”,然后检查是否“=A1=B1”。您再次没有得到“预期”结果,因为单元格产生错误,并且错误无法与“=”进行比较。再次需要一个特殊函数`=IsError()`。 (2认同)