1

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

我们有一个带有 ComboBox 的表单,它被填充,但没有设置默认值。当我去保存表单时,我们需要测试用户是否选择了一个值。代码是:

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

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

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

我猜测"" &强制比较是文本比较,因此可以有效地测试空字符串"",但是之前的比较实际上在做什么,有没有更好、更直观的方法来管理这个?我的解决方案感觉很糟糕。

-- 30 年的 Pascal、HTML、Javascript 编码经验,但不到 1 年的 VBA 编码经验,在接到需要调试的旧应用程序之后。

4

1 回答 1

1

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

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

如果您愿意,您可以在 VBE 即时窗口中自己验证这一点(可使用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属性是此类的默认成员,因此可以安全地省略它。

于 2019-05-28T20:12:46.743 回答