我正在尝试编写一个if语句,如果某个组合框是null,那么它运行某个代码部分,如果它有数据,那么它运行另一个。我写了这个:
Private Sub ProjectAddSetDateAutoBtn_Click()
If ProjectAddAllDueDateAutoCmBx = Null Then
'Code1
Msgbox("ComboBox Is Null")
Else
'Code2
Msgbox("ComboBox Has Data")
End If
End Sub
我没有数据留下组合框,然后它不会在if的第一部分或第二部分的代码中运行代码!如果我在框中输入数据,它将完美地运行if语句的第二部分。没有错误,我对此非常难过。 ComboBoxes有自己的“Null”吗?这个if语句有问题吗?
答案 0 :(得分:16)
Nothing is ever equal to Null, not even another Null
使用IsNull()检查组合框是否为空。
'If ProjectAddAllDueDateAutoCmBx = Null Then
If IsNull(ProjectAddAllDueDateAutoCmBx) = True Then
答案 1 :(得分:4)
您无法使用= Null
比较来获得所需的结果,因为Null会传播。要查看此操作,请尝试:
? Null = Null
在立即窗口中,您将看到返回Null。使用IsNull函数,它会像您期望的那样返回true或false。
Private Sub ProjectAddSetDateAutoBtn_Click()
If IsNull(ProjectAddAllDueDateAutoCmBx) Then
'Code1
Msgbox("ComboBox Is Null")
Else
'Code2
Msgbox("ComboBox Has Data")
End If
End Sub
答案 2 :(得分:4)
虽然接受的答案完全正确,但我采用了不同的方法:
If HasValue(ProjectAddAllDueDateAutoCmBx) Then
HasValue函数是:
Public Function HasValue(v As Variant) As Boolean
If Trim(v & "") <> "" Then
HasValue = True
Else
HasValue = False
End If
End Function
这具有将NULL和“”(或任何纯空格)值视为相同的优点,这是您使用MSAccess控件所需的数倍。例如,在空值文本框中输入值并使用退格键再次删除它将导致“” - 值,而不是NULL。从用户的角度来看,这主要是相同的。
[(v&amp;“”) - 部分只是强制转换为字符串的技巧。]
答案 3 :(得分:3)
我建议
If IsNull(ProjectAddAllDueDateAutoCmBx.Value) Then
它正确检查Null
(IsNull
而不是= Null
),并明确检查组合框的值。
(在大多数情况下 - 根据上下文 - 只使用控件的名称产生值,但显式没有坏处。)
答案 4 :(得分:0)
VB中等效的null是Nothing所以你的检查想成为:
If ProjectAddAllDueDateAutoCmBx Is Nothing Then
...
希望有所帮助。