Excel查看失败的If语句多远?

时间:2015-09-05 17:21:50

标签: excel-vba optimization vba excel

我正在使用VBA,我正在问这个问题,以便优化我的代码。我有类似的东西

$0

所以我把If reallySmallMethod() And reallyBigMethod() then 'Do some awesome code End If 放在reallySmallMethod()之前,因为我认为如果小的那个失败,Excel会跳过那个大的。但是当我放置一个断点并逐步执行这个if语句时,Excel似乎运行了大方法,即使小方法失败了。它是在寻找reallyBigMethod()吗?

所以现在我已经做了这个来优化它

Or

当我在'休息模式'工作时,看起来这段代码似乎更快,但我不确定。

谢谢!

1 个答案:

答案 0 :(得分:4)

您所询问的通常称为短路(布尔)评估(与急切评估相比)。见https://en.wikipedia.org/wiki/Short-circuit_evaluation。仅供参考,此属性通常以语言(短路或急切)定义,而不是允许编译器执行的优化。 VBA没有它,换句话说,它的布尔运算符被定义为渴望。您必须编写两个嵌套的If语句才能达到预期的效果。

可以注意到,短路布尔运算符通常会产生比程序员更渴望的结果。例如,当使用短路运算符超出数组边界时,当意图绕过i < array.length && array [i] ...运算符右侧的数组索引时,&&的条件表达式将很好地工作。但是,即使明显的边界检查失败,具有急切布尔操作的语言仍将评估右手表达式。

正如维基百科所指出的,一些语言既定义了短路又定义了布尔运算符的急切版本,例如: Visual Basic .NET - 当然不要与VBA混淆。