Aborting a Sub procedure from a UserForm

  • Thread starter Thread starter shellshock
  • Start date Start date
S

shellshock

I have a Sub procedure that invokes a userform. On the userform there
are a series of radio buttons and two command buttons, one for OK and
one for CANCEL. When the CANCEL button is pressed, I want the userform
to either hide or unload itself -- I know how to do this part -- and I
want the Sub procedure to abort.

How do I do this last part? I can't figure out how to use the CANCEL
button as input to the Sub procedure to get it to abort itself.
 
I declare a Public Boolean variable in the Declaration section of the
module containing the Sub Procedure eg Public binAbortSub as Boolean.
In the Sub make it equal False before showing the UserForm (binAbortSub
= False). In the code section of the Cancel button type
BinAbortSub = True
Unload Userform (Use your UserForm's Name here)
In the Sub, straight after the line with UserForm.Show, type
If binAbortSub = True then
exit Sub
End If
This works for me but I'm no expert. There might be a better way.
 
Good morning shellshock

After the uloading (or hiding) the userfrom use this command to abort
the procedure:

Exit Sub

HTH

DominicB
 
Thanks to both of you for your suggestions. :) In the end, I used an
integer testflag very much like the boolean variable as suggested by
hanjohn, and I also used the Exit Sub command as suggested by
dominicb.

I inserted the testflag (designated X) in my userform code, which feeds
back to the main procedure as an indicator of whether or not the main
procedure should continue. Here's the userform code:

Option Explicit
Public RCType As Worksheet
Public ws As Worksheet 'this is a placeholder
Public X As Integer 'this is the testflag

Private Sub OptionButton1_Click() 'sample radio button code
Set ws = Worksheets("Sheet1")
X = 1
End Sub

Private Sub OK_Click()
Set RCType = ws
Hide
End Sub

Private Sub CANCEL_Click()
Unload Me
End Sub

The procedure that calls the code:

Sub main_procedure()
UserForm1.Show

If UserForm1.X = 1 Then
UserForm1.RCType.Activate
etc.etc.etc.
Else
Exit Sub
End If

End Sub

So, when the user selects a radio button, ws is defined, and X=1. Then,
when the user presses OK, RCType is equated to ws and the rest of
main_procedure runs.

If the user presses the OK button without first selecting a radio
button, X is still equal to 0, so we Exit Sub. If the user presses
CANCEL, the userform is unloaded, which I guess means that X=0, so that
again we Exit Sub.
 
Shell,
Nothing wrong with your solution. The approach I use is to set the
Userform.Tag parameter, or one of the OptionButton.Tag paramters during a
cancel operation, then check it from the calling sub.
AlexJ
 
Back
Top