What's the difference between “end” and “exit sub” in VBA?
In VBA, sometimes we want to exit the program after some condition is true. But do I use
This is a bit outside the scope of your question, but to avoid any potential confusion for readers who are new to VBA:
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
Endstatement resets allmodule-level variables and all static local variables in allmodules. To preserve the value of these variables, use the
Stopstatement instead. You can then resume execution while preserving the value of those variables.
Endstatement 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.
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:
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:
Terminates the definition of this procedure.