为什么忽略 ComboBox 值的条件测试? (访问VBA)

Why is conditional test for ComboBox value being ignored? (Access VBA)

我有一个 If 子句被完全忽略,直到我发现了一个解决方法,但现在我想更好地了解幕后发生的事情。

我们有一个包含已填充组合框的表单,但未在其上设置默认值。当我去保存表单时,我们需要测试用户是否选择了一个值。代码是:

If (Me.Combo78.Value = "") Then
    mb "Please select a value"
End If

代码永远不会触发,直到我将条件更改为:

If ("" & Me.Combo78.Value = "") Then
    mb "Please select a value"
End If

我猜测 "" & 将比较强制为文本比较,因此可以有效地针对空字符串进行测试 "",但之前的比较实际上在做什么,并且有没有更好、更直观的方法来管理它?我刚才的解决方案感觉很恶心。

-- 在 Pascal 编码方面有 30 年的经验,HTML,Javascript,但在 VBA 的编码方面不到 1 年,在处理了需要调试的遗留应用程序之后。

如果 ComboBox 没有值,则 Me.Combo78.Value 将为空,因此 Me.Combo78.Value = "" 将为空,并且不会验证 if 语句的测试表达式。

在您的第二个代码中,将一个空字符串与一个空值连接将 return 一个空字符串,因此 "" & Me.Combo78.Value returns 一个空字符串,从而验证测试表达式.

如果您愿意,可以在 VBE 即时 Window 中自行验证(使用 Ctrl+G ):

?Null = ""
Null
?Null & "" = ""
True

一个更具可读性的解决方案可能是:

If IsNull(Me.Combo78) Or Me.Combo78 = "" Then
    mb "Please select a value"
End If

或者,您可以使用 Nz 函数:

If Nz(Me.Combo78, "") = "" Then
    mb "Please select a value"
End If

由于 Value 属性 是此 class 的默认成员,因此可以安全地省略它。