Exit a Procedure from a Sub within a sub

A

adambush4242

I'm running a procedure that calls other macros. In one of these macros I
have an if then statement that if true I want to exit the entire procedure.
What is the code for this? Exit Sub just exits the current sub I'm running,
not the entire larger one.

Thanks

Adam Bush
 
C

Charles Williams

Sub MainSub()
Dim blQuit as boolean

blQuit=False
SubSub blQuit

if blQuit then exit sub

....
End Sub
Sub SubSub(blQuit as boolean)

'''
If thereisanerror then
blQuit=true
exit sub
endif
....
End Sub

Charles
__________________________________________________
The Excel Calculation Site
http://www.decisionmodels.com

"(e-mail address removed)"
 
D

Dave Peterson

You could change the called sub to a function and return a boolean value that
you could check after the call.

Sub SubA()
if Functa() = false then
exit sub
end if
End sub
Function FunctA()

functa = true 'be positive!
if somethingbadhappens then
functa = false
exit function 'leave here immediately, too
end if
End Function

Or you could use a module level (or public) variable and just have your called
sub change its status.

Dim OkToContinue as boolean
sub suba()
call subb
if oktocontinue = false then
exit sub
end if
...
End sub
sub subb()
oktocontinue = false
end sub
 
C

Charles Williams

Usually using End is bad practice as it resets all your VBA code and
variables without going through any exit routines.


Charles
__________________________________________________
The Excel Calculation Site
http://www.decisionmodels.com
 
B

Bob Phillips

Do it as functions with some error testing,

Global Const AppErrorNum As Long = 19999
Global ErrorMsg As String

Sub Main()

Const ProcName as String = "Main"

On Error Goto Main_Error

'some code

If Not MyFirstCall Then Err.Raise AppErrorNum

'some more code

If Not MySecondCall Then Err.Raise AppErrorNum
'etc

Main_Exit:
Exit Sub

Main_Error:
If ErrorMsg = "" Then
ErrorMsg = "Error in " & ProcName & vbNewLine & _
"Error: " & Err.Number & ", " & Err.Description
End If
MsgBox ErrorMsg
Resume Main_Exit
End Sub

Public Sub MyFirstCall() As Boolean

Const ProcName as String = "MyFirstCall "
MyFirstCall = True
On Error Goto MyFirstCall_Error

' the real code

MyFirstCall_Exit:
'tidy-up code
Exit Function

MyFirstCall_Error:
MyFirstCall = False
ErrorMsg = "Error in " & ProcName & vbNewLine & _
"Error: " & Err.Number & ", " & Err.Description
Resume MyFirstCall_Exit
Exit Function

Public Sub MySecondCall() As Boolean

Const ProcName as String = "MySecondCall"
MySecondCall = True
On Error Goto MySecondCall_Error

' the real code, including

If Not MyThirdCall Then Err.Raise AppErrorNum

MySecondCall_Exit:
'tidy-up code
Exit Function

MySecondCall_Error:
MySecondCall = False
ErrorMsg = "Error in " & ProcName & vbNewLine & _
"Error: " & Err.Number & ", " & Err.Description
Resume MySecondCall_Exit
Exit Function

Public Sub MyThirdCall() As Boolean

Const ProcName as String = "MyThirdCall"
MyThirdCall = True
On Error Goto MyThirdCall_Error

' the real code

MyThirdCall_Exit:
'tidy-up code
Exit Function

MyThirdCall_Error:
MyThirdCall= False
ErrorMsg = "Error in " & ProcName & vbNewLine & _
"Error: " & Err.Number & ", " & Err.Description
Resume MyThirdCall_Exit
Exit Function

--
__________________________________
HTH

Bob

"(e-mail address removed)"
 

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

Top