GoTo,使用Select和使用单独功能之间的区别是什么?

时间:2015-06-16 14:47:14

标签: vba goto

首先,我知道使用Goto永远不是一个好主意。但是我很难看到以下结构之间的区别......所有这些都按顺序处理条件,当找到真值时停止处理,然后将控制权返回到代码中的指定位置(下一行) ,就像这个特定目标所在的那样。有什么区别:

如果使用GoTo:

If ConditionA then 'This is designed to skip the evaluation of condition B if condition A is met.
    Do something
    Goto Resume
End If
If ConditionB then
    Do something
    Goto Resume
End If
Resume:

选择案例

Select ConditionIsTrue 'This will also skip the evaluation of B if A is true.
    Case A
        Do something
    Case B
        Do something
End select

单独子:

EvaluateConditions(condition)

Sub EvaluateConditions(condition)
    If A then
        DoSomething
        Exit Sub
    End If
    If B then
        DoSomething
        Exit Sub
     End If
End Sub

1 个答案:

答案 0 :(得分:2)

一般来说,

  1. '转到'将执行控制权转移到您要分配的标签。控件永远不会回到您使用的位置' goto'。由于程序流程完全改变,因此不建议使用' goto'。调试变得困难。

  2. 当您编写子程序并从代码的其他部分调用它时,一旦子程序的执行完成,控制就会转移回代码的被调用部分。因此,与goto不同,程序流程不会受到影响,并且始终建议使用子程序而不是goto。

  3. 如果是select语句,它与多个&if; else-else'没有多大区别。声明。而不是有太多“if-else'你可以使用'选择'有更清洁的代码。

  4. 具体到你所要求的,所有三个都是一样的,并且没有差别。您选择的内容取决于您的要求,条件数量,代码片段的可重用性以及未来的增强功能。

    如果您的条件非常少(2或3),并且如果您确定该条代码不需要将来的增强功能,那么它就是“好”。使用goto。(仍然不是一个很好的选择)

    如果这段代码应该是可重用的,甚至是其他的,使用子程序是最好的选择。事实上,即使你的条件很少,也最好使用“选择”。子程序中的语句,以便您的代码看起来干净,并且将来很容易添加更多条件。