VBA不会短路
VBA不支持短路 - 显然是因为它只有按位和/或/不等操作.从VBA语言规范:"逻辑运算符是对其操作数执行按位计算的简单数据运算符." 从这个角度来看,使用true = &H1111和设计VBA是有道理的false = &H0000:这样,逻辑语句可以被评估为按位运算.
缺少短路可能会导致问题
性能:在ReallyExpensiveFunction()评估此语句时将始终运行,即使条件左侧的结果不需要
If IsNecessary() And ReallyExpensiveFunction() Then
'...
End If
错误:如果MyObj为Nothing,则此条件语句将导致运行时错误,因为VBA仍将尝试检查值 Property
If Not MyObj Is Nothing And MyObj.Property = 5 Then
'...
End If
我用来实现短效行为的解决方案是嵌套If的
If cond1 And cond2 Then
'...
End If
Run Code Online (Sandbox Code Playgroud)
变
If cond1 Then
If cond2 Then
'...
End If
End If
Run Code Online (Sandbox Code Playgroud)
通过这种方式,If语句给出了类似短路的行为,即不打算评估cond2是否cond1存在False.
如果存在Else子句,则会创建重复的代码块
If Not MyObj Is Nothing And MyObj.Property …Run Code Online (Sandbox Code Playgroud)