Error not trapped - please help!!!

B

Bura Tino

Hi,

I'm going nuts trying to solve the following problem. If I execute the
following code when the active sheet has no named ranges, the first error is
trapped successfully, but the second one does not get trapped and the
execution breaks!

Sub MySub()
Dim r as Range
Dim isA as Boolean
Dim isB as Boolean

isA = False
isB = False

TryA:
On Error GoTo TryB
Set r = ActiveSheet.Range("AAA")
isA= True
GoTo Proceed

TryB:
On Error GoTo Proceed
Set r = ActiveSheet.Range("BBB")
isB = True
GoTo Proceed

Proceed:
If isAThen
doAStuff
ElseIf isB Then
doBStuff
End If
End Sub

Perhaps it's invalid to have 2 "On Error" statements? In any case, I will
really appreciate your help!

Bura
 
B

Bob Phillips

Bura,

An alternative approach

Sub MySub()
Dim r As Range
Dim isA As Boolean
Dim isB As Boolean

isA = False
isB = False

On Error Resume Next
Set r = ActiveSheet.Range("AAA")
isA = Not r Is Nothing

Set r = ActiveSheet.Range("BBB")
isB = Not r Is Nothing

On Error GoTo 0

If isA Then
doAStuff
ElseIf isB Then
doBStuff
End If
End Sub

--

HTH

Bob Phillips
... looking out across Poole Harbour to the Purbecks
(remove nothere from the email address if mailing direct)
 
C

Chip Pearson

You can't have two On Error Goto statements in one routine.

Sure you can. You can have as many On Error Goto statements as
you want. It may not be the best way to write the code, but it is
certainly legal.


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com
 
B

Bob Phillips

You can actually lose the lines

isA = False
isB = False

because the line

IsA = NOt r Is Nothing will set it to True or False, no need to
initialise
--

HTH

Bob Phillips
... looking out across Poole Harbour to the Purbecks
(remove nothere from the email address if mailing direct)
 
P

Pyball

The reason the second error is not getting trapped is because the firs
error is still in affect. So when the program gets to the second erro
trap the program is still in an error condition so it executes the got
statement.

Try it this way:

Sub MySub()
Dim r as Range
Dim isA as Boolean
Dim isB as Boolean

isA = False
isB = False

TryA:
On Error GoTo TryB
Set r = ActiveSheet.Range("AAA")
isA= True
GoTo Proceed

TryB:
On Error GoTo 0 'This should clear the previous error.
On Error GoTo Proceed
Set r = ActiveSheet.Range("BBB")
isB = True
GoTo Proceed

Proceed:
If isAThen
doAStuff
ElseIf isB Then
doBStuff
End If
End Sub
 
B

Bob Phillips

You should have tried this, you would have seen that it doesn't work.

--

HTH

Bob Phillips
... looking out across Poole Harbour to the Purbecks
(remove nothere from the email address if mailing direct)
 
Top