在 VBA 中,有时我们想在某些条件为真后退出程序。但我应该使用 end
还是 exit sub
?
这有点超出您问题的范围,但为了避免初学 VBA 的读者可能产生的任何混淆:"End "和 "End Sub "并不相同。它们执行的任务不同。
End
停止所有代码的执行,你几乎总是应该使用 Exit Sub
(或 Exit Function
)。
结束会停止所有代码的执行。虽然这听起来很诱人,但它也会清除 所有全局变量和静态变量。 (source)
另请参阅 MSDN dox 中的 End 语句
执行 End
语句时,会重置所有模块级变量和所有模块中的所有静态局部变量。要保留这些变量的值,请使用 Stop
语句。这样就可以在保留这些变量值的同时恢复执行。
注意 End
语句会突然停止代码执行,而不会调用 Unload、QueryUnload 或 Terminate 事件或任何其他 Visual Basic 代码。您放在表格和类模块的 Unload、QueryUnload 和 Terminate 事件中的代码不会被执行。从类模块创建的对象将被销毁,使用 Open 语句打开的文件将被关闭,程序使用的内存将被释放。其他程序持有的对象引用将失效。
结束子 "和 "退出子 "也不一样。因为编译器不允许以调用 Exit Sub
的方式调用 End Sub
。
[!此处输入图片描述][1]
这再次意味着您必须 "退出 Sub",这是一个完全合法的操作:
Exit Sub 立即退出该语句所在的子过程。 继续执行调用Sub存储过程的语句后的语句。 继续执行。Exit Sub 只能在Sub**存储过程内部使用。 存储过程内使用。
此外,一旦你了解了存储过程是如何工作的,很明显,End Sub
不会清除任何全局变量。但它会 清除局部 (Dim'd) 变量:
End Sub 终止此存储过程的定义。