if语句中的Combobox为null

时间:2013-11-12 12:27:54

标签: vba ms-access access-vba ms-access-2013

我正在尝试编写一个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语句有问题吗?

5 个答案:

答案 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

它正确检查NullIsNull而不是= Null),并明确检查组合框的

(在大多数情况下 - 根据上下文 - 只使用控件的名称产生值,但显式没有坏处。)

答案 4 :(得分:0)

VB中等效的null是Nothing所以你的检查想成为:

If ProjectAddAllDueDateAutoCmBx Is Nothing Then

...

希望有所帮助。