在发现解决方法之前,我有一个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进行编码的经验。
答案 0 :(得分:1)
如果ComboBox没有值,则Me.Combo78.Value
将为空,因此Me.Combo78.Value = ""
将为空,并且将不验证if
语句的测试表达式。
在第二个代码中,将空字符串与null值连接将返回一个空字符串,因此"" & 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
属性是此类的默认成员,因此可以安全地将其省略。