How to stop VBA macro automatically?
You can raise your own user-defined error with err.raise
. This is similar to your example, but a little more powerful in that it is an actual error that will halt code execution, even if it's applied to a nested call.
For example,
sub a
on error goto exitCode
call b
msgbox "a complete"
exit sub 'you need this to prevent the error handling code from always running
exitCode:
msgbox "code is exiting..."
'clean up code here
end sub
sub b
call c
msgbox "b complete"
end sub
sub c
msgbox "entering c"
err.raise 555, "foo", "an error occurred"
msgbox "exiting c"
end sub
'OUTPUT:
'entering c
'code is exiting...
The err.raise
line will send the control to the exitCode:
label even though it was called outside of a
. You could use any conditions to test if this custom error should be thrown.
More on the err
object and VBA error handling-
https://msdn.microsoft.com/en-us/library/ka13cy19(v=vs.90).aspx
http://www.cpearson.com/excel/errorhandling.htm