相关疑难解决方法(0)

VBA短路和'替代品

VBA不会短路

VBA不支持短路 - 显然是因为它只有按位和/或/不等操作.从VBA语言规范:"逻辑运算符是对其操作数执行按位计算的简单数据运算符." 从这个角度来看,使用true = &H1111和设计VBA是有道理的false = &H0000:这样,逻辑语句可以被评估为按位运算.

缺少短路可能会导致问题

  1. 性能:在ReallyExpensiveFunction()评估此语句时将始终运行,即使条件左侧的结果不需要

    If IsNecessary() And ReallyExpensiveFunction() Then '... End If

  2. 错误:如果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)

vba short-circuiting

17
推荐指数
2
解决办法
7826
查看次数

AND功能如何在VBA中工作?

如果这是一个愚蠢的问题,我很抱歉,但(Excel VBA)AND功能是否检查其中的每个条件然后继续,或者在第一个FALSE条件下停止而不检查另一个?我想知道为了优化的目的,到目前为止在网上找不到它..提前感谢!

示例:如果InStr(txt,"abc")> 0和InStr(txt,"xyz")> 0则

所以如果在txt变量中找不到"abc"(给出'false'),那么宏也会检查"xyz"或跳过其余的条件

excel vba excel-vba

3
推荐指数
1
解决办法
435
查看次数

标签 统计

vba ×2

excel ×1

excel-vba ×1

short-circuiting ×1