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

时间:2012-12-13 21:23:07

标签: vba ms-access

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

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

基本上,我有一个未绑定的框,用户输入数据然后点击按钮。确认框上的“是”后,未绑定框上的数据将复制到绑定框中。但是,如果用户没有输入任何内容,那么反过来会创建一个空的绑定字段,这可能严重搞砸了路上的查询。

话虽如此,上述代码对我来说根本不适用。例如,如果我设置了如果Me.Bank_Credit.Value = 1然后运行它,则1s变为2s,应该发生。但它只是拒绝为Null或甚至“”工作。

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

提前致谢

2 个答案:

答案 0 :(得分:17)

没有什么比Null更重要了,甚至没有Null。没有什么不等于Null,甚至不是Null。

Bank_Credit 为空时,以下表达式将返回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)

答案 1 :(得分:4)

HansUp的回答是正确的,但我认为添加“Nothing”的类似构造是相关的,它基本上是解除引用对象的VBA关键字。你必须使用像

这样的陈述
If myRange is Nothing Then

您将在VBA帮助文件中看到这些类型的语句(实际上在其他语言中也有类似于此的关键字)。