笔者创建了一个组合框,绑定一个表数据源。在代码中对组合框的选项值进行判断时,以下两段代码会有不同的结果:
一、使用 ISNULL 函数判断
If Not IsNull(Me.Combo7.Value) Then
Select Case Me.Combo7.Column(3)
Case Is = "文本" '选择了文本型字段
...
Case Is = "日期/时间" '选择了日期型字段
...
End Select
Else
MsgBox "无效选择,请重新选择!", vbOKOnly
Me.List9.SetFocus
Me.Combo7.SetFocus '重新选择
End If
二、使用 <>“” 判断
If Me.Combo7.Value <> "" Then
Select Case Me.Combo7.Column(3)
Case Is = "文本" '选择了文本型字段
...
Case Is = "日期/时间" '选择了日期型字段
...
End Select
Else
MsgBox "无效选择,请重新选择!", vbOKOnly
Me.List9.SetFocus
Me.Combo7.SetFocus '重新选择
End If
现象:
1、当组合框没有赋予默认值打开时,前者的ELSE直接跳过,而后者的ELSE则得到执行;
2、当组合框选了某选项值但又立刻删除了该值时,两者的ELSE都得到了执行。
原因:
“” 是空字符串,允许空字符串输入,是指允许零长度字符串输入:””,它包括零长度字符串与空值,不允许空字符串,是指表不接受零长度字符串输入,如果未输入有效文本,则自动插入空值.空值就是指未知的数据,零长度字符串是指没有此值。
当组合框在没有默认值的情况下加载时,系统自动先赋值了空字符串:"",但在组合框中选择某之后再删除时,则系统赋予了空值。
结论: 对""的判断包含对空值的判断。在以上情况下,最好首选使用=""或<>""进行判断。