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

Vba 比较object.Value=Null不会产生预期结果,vba,ms-access,Vba,Ms Access,因此,我有一个令人沮丧的简单问题,我似乎无法解决 If Me.Bank_Credit.Value = Null Then Me.Bank_Credit.Value = 0 End If 基本上,我有一个未绑定的框,用户在其中输入数据,然后点击按钮。确认框为“是”后,未绑定框上的数据将复制到绑定框。但是,如果用户不输入任何内容,则会创建一个空的绑定字段,这会严重影响后续的查询 也就是说,上面的代码根本不适合我。例如,如果我设置Me.Bank_Credit.Value=1,然后运行它,1就会变成2

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

If Me.Bank_Credit.Value = Null Then
Me.Bank_Credit.Value = 0
End If
基本上,我有一个未绑定的框,用户在其中输入数据,然后点击按钮。确认框为“是”后,未绑定框上的数据将复制到绑定框。但是,如果用户不输入任何内容,则会创建一个空的绑定字段,这会严重影响后续的查询

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

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


提前感谢

任何东西都不等于空值,即使是另一个空值。没有任何东西不等于Null,甚至不等于另一个Null

Bank\u Credit
为Null时,以下表达式将返回Null。。。不像您所期望的那样
True
,甚至
False

Debug.Print(Me.Bank\u Credit.Value=Null)
这与即时窗口中出现此结果的原因相同:

Debug.Print Null=Null
无效的
使用
IsNull()
函数

如果为空(Me.Bank\u Credit.Value),则
另外,请查看
Nz()
帮助主题,看看它是否有用。您可以这样做,尽管这并不是对
IsNull()
的真正改进。但是
Nz()
对于其他VBA代码来说非常方便

Me.Bank\u Credit=Nz(Me.Bank\u Credit,0)

HansUp的答案是正确的,但我认为有必要补充一点,即“Nothing”有一个类似的构造,它基本上是一个解引用对象的VBA关键字。你必须使用这样的语句

If myRange is Nothing Then

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

当谈到空值时,“=”不能用作比较器(如果x=Null),但仍然可以用作赋值指令(x=Null)。