1

我正在编写如下所示的 VBA 代码:

If function_one Or Function_two Or Function_three Then
    ' Do Something
End If

所以,如果任何一个函数返回真值,它就会做一些事情。

我想,我写了一个小而高效的代码。

但是在调试过程中我发现,VBA 运行 function_one,获取它的返回值,然后运行 ​​function_two,获取它的返回值,等等第三个,然后评估 if 条件并继续进行。

我想要实现的是,一旦第一个函数返回 true,它就应该做一些事情,而不应该执行其他函数。如果第一个函数失败,则只应调用下一个函数。

后来,我使用循环关键字来完成这个任务,但它看起来并不简单/聪明。你知道吗,我如何以更优化的方式编写相同的代码。

4

2 回答 2

2

您必须手动实现短路:

result = function_one
if not result then
   result = function_two
end if
if not result then
   result = function_three
end if
If result Then
    ' Do Something
End If

AndVBA(和经典 VB)不提供or的短路版本Or(在 VB.Net 中,此类项目被引入为AndAlsoand OrElse

于 2013-06-11T06:22:16.543 回答
1

这应该更有效:

'define the do something function

If function_one Then
'do_something_function

ElseIf function_two Then
'do_something_function

Else function_three Then
'do_something_function

End If

摆脱你的预感,SBI。如果 function_one 为真,它应该执行 do_something 函数,而不检查其他函数。不过,我可能完全错了,因为我不在装有 Microsoft Office 的计算机附近。

于 2013-06-11T06:12:07.627 回答