比较 object.Value = Null 不会产生预期的结果

Posted

技术标签:

【中文标题】比较 object.Value = Null 不会产生预期的结果【英文标题】:Comparing object.Value = Null does not produce expected results 【发布时间】:2012-12-13 21:23:07 【问题描述】:

所以我有一个令人沮丧的简单问题,我似乎无法解决。

If Me.Bank_Credit.Value = Null Then
Me.Bank_Credit.Value = 0
End If

基本上,我有一个未绑定的框,用户可以在其中输入数据然后点击按钮。在确认框为“是”后,未绑定框上的数据将复制到已绑定框。但是,如果用户没有输入任何内容,则会创建一个空的绑定字段,这可能会严重影响后续查询。

话虽如此,上面的代码根本不适合我。例如,如果我设置 If Me.Bank_Credit.Value = 1 然后运行它,1 会变成 2,这应该会发生。但它只是拒绝为 Null 甚至 "" 工作。

我很确定这个问题有一个简单的解决方案,我就是想不通。

提前致谢

【问题讨论】:

【参考方案1】:

没有任何东西等于 Null,即使是另一个 Null。没有什么不等于 Null,即使是另一个 Null。

Bank_Credit Null 时,以下表达式将返回 Null ... 而不是您所期望的 True,甚至是 False

Debug.Print (Me.Bank_Credit.Value = Null)

在立即窗口出现这个结果的原因是一样的:

Debug.Print Null = Null
Null

使用IsNull() 函数。

If IsNull(Me.Bank_Credit.Value) Then

另外,查看Nz() 帮助主题,看看它是否有用。你可以这样做,虽然它并不是对IsNull() 的真正改进。但是Nz() 可以很方便的用于其他 VBA 代码。

Me.Bank_Credit = Nz(Me.Bank_Credit, 0)

【讨论】:

对于 Null,'=' 不能用作比较器(如果 x = Null then),但仍然可以用作赋值指令(x = Null)。【参考方案2】:

HansUp 的回答是正确的,但我认为需要补充一点,“Nothing”有一个类似的构造,它基本上是取消引用对象的 VBA 关键字。你必须使用像

这样的语句
If myRange is Nothing Then

您会在整个 VBA 帮助文件中看到这类语句(实际上在其他具有类似关键字的语言中)。

【讨论】:

以上是关于比较 object.Value = Null 不会产生预期的结果的主要内容,如果未能解决你的问题,请参考以下文章

C# switch 表达式 null 大小写

3.12 在运算和比较时使用null值

mysql if判断字符串比较

java2_null""return;return null;return "";的比较

返回匹配object.date和求和object.value的对象数组[关闭]

js数组如何去重?