What's the difference between “end” and “exit sub” in VBA?

前端 未结 1 1602
一向
一向 2020-12-01 06:33

In VBA, sometimes we want to exit the program after some condition is true. But do I use end or exit sub?

相关标签:
1条回答
  • 2020-12-01 07:10

    This is a bit outside the scope of your question, but to avoid any potential confusion for readers who are new to VBA: End and End Sub are not the same. They don't perform the same task.

    End puts a stop to ALL code execution and you should almost always use Exit Sub (or Exit Function, respectively).

    End halts ALL exectution. While this sounds tempting to do it also clears all global and static variables. (source)

    See also the MSDN dox for the End Statement

    When executed, the End statement resets allmodule-level variables and all static local variables in allmodules. To preserve the value of these variables, use the Stop statement instead. You can then resume execution while preserving the value of those variables.

    Note The End statement stops code execution abruptly, without invoking the Unload, QueryUnload, or Terminate event, or any other Visual Basic code. Code you have placed in the Unload, QueryUnload, and Terminate events offorms andclass modules is not executed. Objects created from class modules are destroyed, files opened using the Open statement are closed, and memory used by your program is freed. Object references held by other programs are invalidated.

    Nor is End Sub and Exit Sub the same. End Sub can't be called in the same way Exit Sub can be, because the compiler doesn't allow it.

    This again means you have to Exit Sub, which is a perfectly legal operation:

    Exit Sub
    Immediately exits the Sub procedure in which it appears. Execution continues with the statement following the statement that called the Sub procedure. Exit Sub can be used only inside a Sub procedure.

    Additionally, and once you get the feel for how procedures work, obviously, End Sub does not clear any global variables. But it does clear local (Dim'd) variables:

    End Sub
    Terminates the definition of this procedure.

    0 讨论(0)
提交回复
热议问题