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) 您能说说如何将 Excel Range("G2:AA1000") 分配给二维数组吗?如果可能的话,在对该 2D 数组执行某些操作后如何将该 2D 数组返回到相同的范围?将 Range 分配给 2D 数组后,如何从该 2D 矩阵中识别每一行?
谢谢,