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

在VBA中,有些时候我们想在一些条件成立之后退出程序。 但是,我使用end还是exit sub

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

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

结束所有执行。 虽然这听起来很诱人,但它也清除了所有的全局variables和静态variables。 ( 来源 )

另请参阅MSDN dox 结束语句

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

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

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

在这里输入图像说明

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

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

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

结束小组
终止这个过程的定义。