VBA中“end”和“exit sub”之间有什么区别?

时间:2016-04-08 05:03:52

标签: excel vba excel-vba

在VBA中,有时我们想在某些条件为真后退出程序。但我是否使用endexit sub

1 个答案:

答案 0 :(得分:43)

这有点超出了您的问题的范围,但为了避免对VBA新手的读者造成任何混淆:EndEnd Sub不一样。他们没有执行相同的任务。

End会停止所有代码执行,您几乎应该始终使用Exit Sub(或Exit Function)。

  

结束停止所有exectution。虽然听起来很诱人,但它也很清晰   所有全局和静态变量。 (source

另请参阅End Statement

的MSDN dox
  

执行时,End语句将重置所有模块中的所有模块级变量和所有静态局部变量。要保留这些变量的值,请改用Stop语句。然后,您可以在保留这些变量的值的同时恢复执行。

     

注意End语句突然停止代码执行,而不调用Unload,QueryUnload或Terminate事件或任何其他Visual Basic代码。您不会执行放置在Unload,QueryUnload和Terminate事件中的代码和类模块。从类模块创建的对象将被销毁,使用Open语句打开的文件将被关闭,并且程序使用的内存将被释放。其他程序持有的对象引用无效。

End SubExit Sub也不一样。无法以End Sub的方式调用Exit Sub,因为编译器不允许它。

enter image description here

这再次意味着您必须Exit Sub,这是perfectly legal operation

  

退出子
  立即退出出现的Sub过程。   继续执行声明之后的声明   称为 Sub 程序。 退出子只能在中使用   程序。

此外,一旦您了解了程序的工作方式,显然End Sub不会清除任何全局变量。但确实clear local (Dim'd) variables

  

结束次
  终止此过程的定义