比较 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 不会产生预期的结果的主要内容,如果未能解决你的问题,请参考以下文章
java2_null""return;return null;return "";的比较