exiting the whole macro

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

I have the following example:

Sub test()
call Test_2
MsgBox ("fail")
End Sub

Sub Test_2()
'the code I need has to go here!
End Sub

in the second sub I need a command/section of code that will exit the whole
macro, currently end sub and exit sub just exit the second sub and continue
running the first sub (displaying the msg box "fail" as a test)

there has to be a way to safety bomb out of the macro without resorting to
ending and closing the whole sheet,

can anyone help?
 
Sub test()
If Test_2() = "exit now" Then Exit Sub
MsgBox ("fail")
End Sub

Function Test_2() As String
'the code I need has to go here!
Test_2 = "exit now"
End Function
 
Exit Sub should work.

Sub test()
call Test_2
MsgBox ("fail")
End Sub

Sub Test_2()
If myCriteria = True Then
Exit Sub
End If
'the code I need has to go here!
End Sub

I threw in an If statement to show that you can set the criteria for when
you want to exit the Test_2 sub.

The Exit Sub in Test_2 will automatically revert back to the calling sub
Test_1.
It will begin executing on the line following the call for Test_2, or in
this case,
your message box.
 
that works, but only if the exit sub is in the second sub, not in a 3rd or
4th,

i want this to be attached to some error handling, so calling the sub that
has the 'bomb out of everytihng' code could happen any time,

there will be a sub to deal with errors and to print meaning fill text boxes
to help the user with the error, this error sub will be either 2 or 3 subs in
and will be called from the on err bit,
 
the problem being i dont want it to display the msgbox("fail") thats a test
to see if the macro ends totaly without going back to the calling sub
 
Sorry, I misunderstood your posting. You can use the End command. That
stops everything, but it wipes out all your variables. You can also use
Application.Quit, but that shuts down that instance of Excel. The only other
suggestion I have is to incorporate the procedure in Test_2 into Test_1 so
that you only have one sub and then use the Exit Sub command. Of course,
that may not be practical because of size.
 
The END command by itself halts code execution. However, it doesn't do it
nicely.

(see help).

To do it nicely, you will need to put your error handling only in the
topmost routine and vba will seek the first error handler going back up the
call chain ending up in the topmost sub where you can exit.
 
Maybe this will help. Notice that the error ripples back to the first
routine. James

Sub Sub1()
On Error GoTo ErrHandler
Sub2
MsgBox "No error found"
Exit Sub
ErrHandler:
MsgBox "Error " & Err & Chr(13) & Error
End Sub

Sub Sub2()
Sub3
End Sub

Sub Sub3()
Error 15
End Sub
 
thanks, the end works, i dont want any of the variables saved, if the error
occurs its because there is rubbish in the input file, so i want the whole
thing wiped
 
same to you tom, thanks

Tom Ogilvy said:
The END command by itself halts code execution. However, it doesn't do it
nicely.

(see help).

To do it nicely, you will need to put your error handling only in the
topmost routine and vba will seek the first error handler going back up the
call chain ending up in the topmost sub where you can exit.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top