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

Nic*_*las 21 excel vba excel-vba

在VBA中,有时我们想在某些条件成立后退出程序.但我使用endexit sub

Veg*_*ard 52

这有点超出了你的问题范围,但为了避免对VBA新手的读者产生任何混淆:End并且End Sub不一样.他们不执行相同的任务.

End停止所有代码执行,你应该几乎总是使用Exit Sub(或Exit Function分别).

结束停止所有的exectution.虽然这听起来很诱人,但它也会清除所有全局变量和静态变量.(来源)

另请参阅结束语句的MSDN dox

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

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

也不是End SubExit Sub相同的.End Sub不能以同样的方式调用Exit Sub,因为编译器不允许它.

在此输入图像描述

这再次意味着你必须Exit Sub这是一个完全合法的操作:

退出Sub
立即退出出现的Sub过程.继续执行调用Sub过程的语句后面的语句.Exit Sub只能在Sub 过程中使用.

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

End Sub
终止此过程的定义.

  • @ Mr.TA据我所知,到目前为止,公认的是,“ Return”是许多在常规VB中广泛可用但在VBA中不可用的事物之一。[您从不使用它来返回函数值](/sf/ask/194718261/),但是您可以使用它来[返回从先前跳到的代码块中](/sf/answers/1065826891/)。 (2认同)