【发布时间】:2016-07-29 06:18:59
【问题描述】:
在 VBA 中,有时我们想在某些条件为真后退出程序。但是我使用end 还是exit sub?
【问题讨论】:
在 VBA 中,有时我们想在某些条件为真后退出程序。但是我使用end 还是exit sub?
【问题讨论】:
这有点超出您的问题范围,但为了避免对 VBA 新手造成任何潜在混淆:End 和 End Sub 不一样。他们不执行相同的任务。
End 停止所有代码执行,您应该几乎总是使用Exit Sub(或Exit Function,分别)。
End 停止所有执行。虽然这听起来很诱人,但它也很清楚 所有全局和静态变量。 (source)
另请参阅 End Statement 的 MSDN dox
执行时,
End语句会重置所有模块级变量和所有模块中的所有静态局部变量。要保留这些变量的值,请改用Stop语句。然后您可以继续执行,同时保留这些变量的值。注意
End语句会突然停止代码执行,而不调用 Unload、QueryUnload 或 Terminate 事件或任何其他 Visual Basic 代码。您放置在表单和类模块的 Unload、QueryUnload 和 Terminate 事件中的代码不会被执行。从类模块创建的对象被销毁,使用 Open 语句打开的文件被关闭,程序使用的内存被释放。其他程序持有的对象引用无效。
End Sub 和 Exit Sub 也不相同。 End Sub 不能像 Exit Sub 那样被调用,因为编译器不允许这样做。
这再次意味着您必须Exit Sub,即perfectly legal operation:
退出子
立即退出它出现的 Sub 过程。 继续执行以下语句之后的语句 称为 Sub 过程。 Exit Sub 只能在 Sub 内使用 程序。
此外,一旦您对过程的工作方式有所了解,End Sub 显然不会清除任何全局变量。但它确实clear local (Dim'd) variables:
结束子
终止此过程的定义。
【讨论】:
Return吗?
Return 是在常规 VB 中广泛使用但在 VBA 中大多不可用的许多东西之一。 You never use it to return function values,但你可以用它来return from a previously jumped-to code block。