Ending session

F

Freddie Mac

I have a macro that does alot of things. Sometimes I want to call a sub that
ends the program for whatever reason. I dont know how to write this. My code
is:

Private Sub avbrytProgrammet(varDataSaknas)
MsgBox ("Error 402. Program session aborted.")
Me.End
End Sub

The line is wrong. How do you write this?
 
N

NickHK

Depending on exactly what you mean by "End session", there is:
Exit Sub/Function - Stop execution the current routine
ThisWorkbook.Close - Close the current WB
Application.Quit - Close Excel

NickHK
 
F

Freddie Mac

yes I know. But I want to quit rúnning the macro. The workbook shall still be
open..

"NickHK" skrev:
 
F

Freddie Mac

well the sub is not the whole program. I have e.g. a main sub that calls
other subs. In these subs I sometimes call the sub that I want to use for
exiting the program. If I write exit sub I just exit the sub that is used for
closing the program and I will return to where ever I was in the code. Is
there no way of solving the problem?

"NickHK" skrev:
 
N

NickHK

If you have error trapping in your main sub, you can an error when you know
you need to exit the whole code and the error will bubble up the the next
active error trap. e.g.
Sub Mainstart
On Error Goto handler
Call Macro1
Exit Sub
Handler:
Select Case Err.Number
Case 15000 'Or whatever err.number you use
msgBox "Need to Quit"
Case Else
'Handle other errors
End Select
End Sub

Sub macro1
'Whatever code
call macro2
'More code
End sub

Sub macro2
'Code...
'Something happens that means needs to quit
Err.raise 15000
End

NickHK
 
S

Scoops

Freddie said:
well the sub is not the whole program. I have e.g. a main sub that calls
other subs. In these subs I sometimes call the sub that I want to use for
exiting the program. If I write exit sub I just exit the sub that is used for
closing the program and I will return to where ever I was in the code. Is
there no way of solving the problem?

Hi Freddie

Check for the stop criteria in the parent routine.

Regards

Steve
 
F

Freddie Mac

Thanks that seems like a nice way to handle the problem. However when trying
use your code I get "Unidentified etikett" (translation from swedish). My
code looks like:

Public Sub mainProgram()
Dim x As String
On Error GoTo handler
Call worksheetMaker(x)
........
Private Sub worksheetMaker(x As String)
If .......
Err.Raise 15000
........

and I dont know how to write the handler but I tried:

Private sub handler()
Select Case Err.Number
Case 15000
MsgBox "Need to Quit"
Case Else
'Handle other errors
End Select
End Sub

I am not very good at VB so please help me with this! I am most greatful for
any assistance!

"NickHK" skrev:
 
N

NickHK

The handler is not a separate routine, it is label within mainprogram,
followed by a colon ":". So
Sub MainProgram
On Error Goto Handler
'....Code
Exit Sub 'So you do not execute the Handler normally
Handler: '<<<<< Here
Select case.... etc

End Sub
 
K

Kaak

You can write some of the code in functions like:

Function Task01(ByVal UserName as String) as Boolean

If UserName <> "Administrator" Then
Task01 = False
Else
Task01 = True
End if

End Function

Then in your sub you can use

If Not Task01 Then Exit Sub
 
F

Freddie Mac

Great it works just perfect! Thanks!!!! Is it possible to send varaibles to
the error handler in some way? See i want to be able to send a varaible so i
can use a messagebox that displays what is wrong. the same type of error
occrus very often but with different variables. since i have many variables
it is impossible to define an error case for each variable....would be great
if you knew how to solve it!

"NickHK" skrev:
 
N

NickHK

You can either use a global variable.
Look at the full syntax for Err.Raise, as there are other arguments that may
be useful.

Or use the functionality outlined by Kaak to pass info back in a return
value, check its value after the call and progressing backwards.

NickHK
 

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