Exit a Procedure from a Sub within a sub

  • Thread starter Thread starter adambush4242
  • Start date Start date
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
 
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)"
 
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
 
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
 
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)"
 
Back
Top