Can't "Call" Error Handler in Standard Module from Form Module

G

Guest

I've followed 2 books exactly, as far as I can tell, but "it" doesn't work.

I have in a Standard Module [modBusinessLogic]:
_____________________________

' General Error Handler to be called from most procedures

Public Sub GenErrHand(lngErrNumber As Long, strErrDesc As String,
strModuleSource As String, strProcedureSource As String)

(I'd put the code in here, but this Sub isn't even being "called" - that's
the problem)

End Sub
_________________________

I have in a Form's Module [Form_FA1_OrgMaster_All]:
_________________________
Private Sub cboOrgs_AfterUpdate()

On Error GoTo HandleError

' Populates a combo box on the Financial Reports subform with reports titles
for the Org just chosen

(((NOTE: the first subform name below is purposefully misspelled -
not supposed to be ...FinRpt..., but rather ...FinRpts... - this sets up an
error to test Error Handler)))

Me.subfrmctrlFinRpt!cboIS_BySrv_List = Null
Me.subfrmctrlFinRpts!cboIS_BySrv_List.Requery

... More Code ...

Exit Sub

HandleError:
Dim strPrcdrName As String
strPrcdrName = "cboOrgs_AfterUpdate"
Dim strModName As String
strModName = Application.CurrentObjectName

GenErrHand Err.Number, Err.Description, strModName, strPrcdrName

Exit Sub

End Sub
_________________________
When I tested (with the Immediate Window) the Error Handler with a procedure
in the Standard Module that would create an error, it produced the Message
Box I want.

But when I test it with the set up above (chosing an Organization in the
Combo Box on the form), instead of getting the Message Box I want, I get
"Compile Error: Method or data member not found" - which is obviously the
regular VBA Message Box.

Why isn't my Error Handler being "called" correctly? Thanks

John D
 
A

Allen Browne

There could be another error in the module of that form.

1. Open the form's module in design view.

2. In the General Declarations (very top of the code), make sure you have
the line:
Option Explicit

3. Choose Compile on the Debug menu.
Fix any errors, and repeat until the code compiles without error.
 
G

Guest

Allen

1) Option Explicit is in the General Declarations section of the Form's
Module.

2) I chose Compile on the Debug menu - fixed a couple of errors in OTHER
form modules. The db modules now all compile w/o error.

BUT - I still get the result I describe below.

Someone in another forum suggested I make sure that Tools/Options/General -
Error Trapping on the VBA Editor menu is set to "Break on Unhandled Errors" -
it is. Is that right? And, since I didn't even know about this Option - are
there other "settings" in either Access or VBA Editor that could cause this
problem?

Thanks - John D
 
A

Allen Browne

Try something like this:

Private Sub cboOrgs_AfterUpdate()
'On Error GoTo HandleError
Dim strPrcdrName As String
Dim strModName As String
strPrcdrName = "cboOrgs_AfterUpdate"
strModName = Application.CurrentObjectName

Debug.print Me.subfrmctrlFinRpt.ControlType
Debug.print Me.subfrmctrlFinRpt.Form!cboIS_BySrv_List

Exit_Handler:
Exit Sub

HandleError:
Stop
GenErrHand Err.Number, Err.Description, strModName, strPrcdrName
Resume Exit_Handler
End Sub

If the subform control is actually named subfrmctrlFinRpts (i.e. with a
trailing S), the code should not compile. Make sure the Name AutoCorrect
boxes are unchecked, and compact the database, and see if it still compiles.

If it compiles and runs okay, then you have something else on the form named
subfrmctrlFinRpt.

If it gives the error, you can remove the single quote from line 1, i.e.:
On Error GoTo HandleError

It should then go to the error handler. Press F8 to trace the code through
your error hander routine.

(BTW, I'm not sure Application.CurrentObjectName is a good idea. If the code
is called from another routine it may return the active form instead of the
form that actually has this code in its module.)

HTH.

--
Allen Browne - Microsoft MVP. Perth, Western Australia

Reply to group, rather than allenbrowne at mvps dot org.

John D said:
I've followed 2 books exactly, as far as I can tell, but "it" doesn't
work.

I have in a Standard Module [modBusinessLogic]:
_____________________________

' General Error Handler to be called from most procedures

Public Sub GenErrHand(lngErrNumber As Long, strErrDesc As String,
strModuleSource As String, strProcedureSource As String)

(I'd put the code in here, but this Sub isn't even being "called" -
that's
the problem)

End Sub
_________________________

I have in a Form's Module [Form_FA1_OrgMaster_All]:
_________________________
Private Sub cboOrgs_AfterUpdate()

On Error GoTo HandleError

' Populates a combo box on the Financial Reports subform with reports
titles
for the Org just chosen

(((NOTE: the first subform name below is purposefully misspelled -
not supposed to be ...FinRpt..., but rather ...FinRpts... - this sets up
an
error to test Error Handler)))

Me.subfrmctrlFinRpt!cboIS_BySrv_List = Null
Me.subfrmctrlFinRpts!cboIS_BySrv_List.Requery

... More Code ...

Exit Sub

HandleError:
Dim strPrcdrName As String
strPrcdrName = "cboOrgs_AfterUpdate"
Dim strModName As String
strModName = Application.CurrentObjectName

GenErrHand Err.Number, Err.Description, strModName, strPrcdrName

Exit Sub

End Sub
_________________________
When I tested (with the Immediate Window) the Error Handler with a
procedure
in the Standard Module that would create an error, it produced the Message
Box I want.

But when I test it with the set up above (chosing an Organization in the
Combo Box on the form), instead of getting the Message Box I want, I get
"Compile Error: Method or data member not found" - which is obviously the
regular VBA Message Box.

Why isn't my Error Handler being "called" correctly? Thanks

John D
 
G

Guest

Ah - the internet. I just spent several hours wrestling with this issue -
wrote a response to your last post - hit send and BOOM - "Sorry - server's
too busy - too bad!". 30 minutes later - it hasn't shown up. Oh well.

1) Forgot to tell you I corrected the spelling of the subformcontrol before
I compiled.

2) I then changed spelling back to the "error" - it wouldn't compile.

3) I took the single quotation mark out thereby "activating" the On Error
line. When I chose a new organization in [cbo_Orgs] I still got the system
error message - not my custom message.

Someone just suggested to me that my problem is that my custom Error Handler
would only "work" at runtime, and the problem with the error I've set up is
that it produces a Compile error, not Runtime error.

The book I followed set up an error in passing variables to a function - not
a sub. The function divided a FirstNum by a SecondNum to produce a Result.
That code, along with the Error Handler that would be called from the
function if there were an error, compiled just fine. But when I passed the
arguments " 5,0 " to the function through the immediate window I got a Divide
By Zero error. At that point, the custom Error Handler intercepted the error
and displayed the "new custom" message.

So - could the problem be that I'm trying to force a custom Error Handler to
intercept a Compile Error when it can only work for Runtime Errors?

Thanks - John D
 
A

Allen Browne

Some errors (such as syntax errors) must be handled before the code can run.
The error handler cannot handle those.
 
G

Guest

Allen - when you say "some errors (syntax errors) must be handled before the
code can run", I assume you mean that the hypothesis that a "custom error
handler" won't work with ANY compilation error - including misspelled object
names - is not correct. AND, that the problem I'm having is not because I'm
trying to make a "custom error handler" respond to a "compiler error"?

Thanks from the other side of the world - John D (Redwood Valley - CA) (USA)
 
A

Allen Browne

Correct: the custom error handler cannot handle compile errors.

If the code doesn't compile, it won't run, so it cannot go to the error
handler.
 

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