对不起,如果这是一个愚蠢的问题,但(Excel VBA)AND功能是否检查其中的每一个条件然后继续,或者在第一个FALSE条件下停止而不检查另一个?我想了解优化目的,到目前为止在网上找不到任何内容..提前致谢!
示例:如果是InStr(txt," abc")> 0和InStr(txt," xyz")> 0然后
所以如果" abc"没有在txt变量中找到(给出' false'),那么宏会检查" xyz"太多或跳过休息条件
答案 0 :(得分:5)
VBA似乎继续前进:
Sub ANDTest()
If f1() And f2() Then MsgBox "X"
End Sub
Public Function f1() As Boolean
f1 = False
End Function
Public Function f2() As Boolean
MsgBox "in f2"
f2 = False
End Function
答案 1 :(得分:2)
是的,VBA始终在And语句中测试两个条件。这是您无法测试错误值的原因之一。
例如:
If Not IsError(range("a1").value) And range("a1").value > 0 Then
当遇到单元格中的工作表错误值(例如#N / A,#DIV / 0!等)时,上述将始终失败(类型不匹配),因为它仍将尝试查看错误值是否大于零。
If Not IsError(range("a1").value) Then
If range("a1").value > 0 Then
当遇到单元格中的错误值时,上述情况不会失败,因为第一个If语句检测到错误,而且从未到达第二个错误。
在您的情况下, abc 和 xyz 都必须在 txt 字符串中,否则语句将失败。