Home |
Search |
Today's Posts |
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
What is the 'scope' of On Error Resume Next?
Is it for a sub, for the next line after the statement only, for a module, or for a workbook/project? If more than one of these, how does one specify the different ones? Thanks Matt |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
The scope is the for that Sub.
After exiting the sub it is - say - reset. As to specify different ones within the sub, you can do On Error GoTo 0 '0' is not a label, it is just used to reset the Resume. Thus if On Error Resume Next 'line one of code 'line two of code On Error GoTo 0 The resume next part will work only for the lines between Resume Next and GoTo 0, After the GoTo 0 . You can again use Resume Next "after the GoTo 0" on any further down lines. (and use again GoTo 0) Sharad "Matt Jensen" wrote in message ... What is the 'scope' of On Error Resume Next? Is it for a sub, for the next line after the statement only, for a module, or for a workbook/project? If more than one of these, how does one specify the different ones? Thanks Matt |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Matt,
Try this code Sub test() testa testb End Sub Sub testa() Dim rng As Range On Error Resume Next rng = Range("A1") End Sub Sub testb() Dim rng As Range rng = Range("A1") End Sub What exactly do you mean by the secnd part? -- HTH RP (remove nothere from the email address if mailing direct) "Matt Jensen" wrote in message ... What is the 'scope' of On Error Resume Next? Is it for a sub, for the next line after the statement only, for a module, or for a workbook/project? If more than one of these, how does one specify the different ones? Thanks Matt |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Thanks Bob
So it's applicable to a procedure only then. Cool, that answers the second part then thanks Matt "Bob Phillips" wrote in message ... Matt, Try this code Sub test() testa testb End Sub Sub testa() Dim rng As Range On Error Resume Next rng = Range("A1") End Sub Sub testb() Dim rng As Range rng = Range("A1") End Sub What exactly do you mean by the secnd part? -- HTH RP (remove nothere from the email address if mailing direct) "Matt Jensen" wrote in message ... What is the 'scope' of On Error Resume Next? Is it for a sub, for the next line after the statement only, for a module, or for a workbook/project? If more than one of these, how does one specify the different ones? Thanks Matt |
#5
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Ahh, lovely thanks Sharad
Cheers Excellent in fact! Matt "Sharad Naik" wrote in message ... The scope is the for that Sub. After exiting the sub it is - say - reset. As to specify different ones within the sub, you can do On Error GoTo 0 '0' is not a label, it is just used to reset the Resume. Thus if On Error Resume Next 'line one of code 'line two of code On Error GoTo 0 The resume next part will work only for the lines between Resume Next and GoTo 0, After the GoTo 0 . You can again use Resume Next "after the GoTo 0" on any further down lines. (and use again GoTo 0) Sharad "Matt Jensen" wrote in message ... What is the 'scope' of On Error Resume Next? Is it for a sub, for the next line after the statement only, for a module, or for a workbook/project? If more than one of these, how does one specify the different ones? Thanks Matt |
#6
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Hi Matt,
Matt Jensen wrote: What is the 'scope' of On Error Resume Next? Is it for a sub, for the next line after the statement only, for a module, or for a workbook/project? If more than one of these, how does one specify the different ones? Thanks Matt There is one more thing worth mentioning here. Yes, error handling set in a routine will be reset when that routine has finished executing. However, any procedures called *by that routine* that do not have their own error handling will inherit the error handling of the calling routine. This can cause unexpected results if you aren't prepared for it. For example: Sub Demo() On Error Resume Next SubA SubB On Error Goto 0 End Sub Sub SubA() Dim rng As Range rng = Range("A1") End Sub Sub SubB() Dim l As Long l = CLng("ABC") End Sub Even though runtime errors are generated by both SubA and SubB, no error message will be displayed. That is because error handling rolls "uphill" - since SubA has no error handling, the error is raised back up the call stack to the Demo subroutine, which then handles the error by Resume Next and continues on to call SubB. Since SubB has no error handling defined, the same thing happens when it encounters a runtime error. This behavior extends all the way through the call stack, so if you have SubA that calls SubB, which in turn calls SubC, and SubB and SubC have no error handling defined, the error handler in SubA would catch any errors from SubA, SubB, or SubC. Just thought I'd mention this behavior in case you weren't aware of it. -- Regards, Jake Marx MS MVP - Excel www.longhead.com [please keep replies in the newsgroup - email address unmonitored] |
#7
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
An error handler handles errors in subordinate routine if they don't have
their own error handler. When the error is encounterd, the subordinate routine exits up to the next routine with an error handler. that is why the last msgbox in each subordinate routine is not executed: Sub test() On Error Resume Next MsgBox "test Before A err:" & Err.Number testa MsgBox "test After A err:" & Err.Number testb MsgBox "ending err:" & Err.Number End Sub Sub testa() Dim rng As Range MsgBox "In TextA Line1 err: " & Err.Number Err.Raise 5000 MsgBox "In TestA Last Line err:" & Err.Number End Sub Sub testb() Dim rng As Range MsgBox "In TextB Line1 err: " & Err.Number Err.Raise 6000 MsgBox "In Testb Last Line err: " & Err.Number End Sub -- Regards, Tom Ogilvy "Matt Jensen" wrote in message ... What is the 'scope' of On Error Resume Next? Is it for a sub, for the next line after the statement only, for a module, or for a workbook/project? If more than one of these, how does one specify the different ones? Thanks Matt |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
On Error Resume Next | Excel Programming | |||
On error resume next statement ignored! | Excel Programming | |||
ON ERROR RESUME NEXT | Excel Programming | |||
On Error Resume Next | Excel Programming | |||
On Error Resume Next | Excel Programming |