Results 1 to 10 of 52

Thread: Resume On Error GoTo 0 -1 GoTo Error Handling Statements Runtime VBA Err Handling ORNeRe GoRoT N0Nula 1

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #11
    Fuhrer, Vierte Reich DocAElstein's Avatar
    Join Date
    Aug 2014
    Posts
    10,457
    Rep Power
    10

    Part 1) Err object ... Err.Raise

    _..... continuing from last post

    In any practical use of the Err.Raise Method we would likely use it within one of the main two Error Handlers, On Error Resume Next or On Error GoTo LabelOrLineNumber

    Indeed to progress further with the experiments here that will be useful to use it in that form.
    I prefer to use the On Error GoTo LabelOrLineNumber , as the previous experiments showed the it was somewhat unexpected that when errors occurred with the On Error Resume Next that the information in the Err object properties were maintained. As I don’t know what extra coding is in place to make that happen, I will stick with the On Error GoTo LabelOrLineNumber as I am thinking that this may be more fundamental , which is preferable when delving down in experiments.

    The following code is the simplified typical usage of On Error GoTo LabelOrLineNumber to hook from the LabelOrLineNumber position our code Sub RaiseErection() into the Exception software, allowing normal code type progression in the aroused state.
    The purpose of the error handling code section is to give full details of the Err object Properties for different .Raise argument.
    This will be helpful as an insight into how we might want to use the Err.Raise in a “customised” error handler
    With the error handler in place, then as usual, we do not prevent an erecting to the exception state, - but the code is not ended via the default VBA error handler via a pop up with the Error description and Error Number displayed. The code in the exception state continues, that is to say the sub routine is now part of the exception software which continues allowing us to use the error object for those two properties of Error description and Error Number but also the other Properties available.
    Code:
    Sub RaiseErection()
     On Error GoTo EmBed
     Err.Raise Number:=9999
    Exit Sub ' You never come here
    EmBed: ' Error handling code section
    Dim strMsg As String
     Let strMsg = "Number:=   " & Err.Number & vbCr & vbLf & "Description:=    " & Err.Description & vbCr & vbLf & "Source:=  " & vbCrLf & "HelpFile:= """ & Err.HelpFile & """" & vbCrLf & "HelpContext:=    " & Err.HelpContext & vbCrLf & "LastDllError   " & Err.LastDllError
     MsgBox strMsg: Debug.Print strMsg
    End Sub
    
    Here the typical results displayed in a message box and also available to copy from the immediate window:

    Number:= 9999
    Description:= Anwendungs- oder objektdefinierter Fehler
    Source:=
    HelpFile:= C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA6\1031\VbLR6. chm
    HelpContext:= 1000095
    LastDllError 0


    One useful side effect from all this latest foray is the possibility to get at a working example of the Help File Button option typically seen in Pop up boxes. As example I can get at the above help info, ( which is the default when no error is listed for the error number given ) , now using codes such as this:
    Code:
    Sub HilfeIWishIHadSeenThisBefore()
     Application.Help HelpFile:="C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA6\1031\VbLR6.chm", HelpContextID:=1000096
     VBA.InputBox prompt:="Test a HelpFile Button", HelpFile:="C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA6\1031\VbLR6.chm", Context:=1000095
                           'Application.InputBox Prompt:="Test a HelpFile Button", HelpFile:="C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA6\1031\VbLR6.chm", HelpContextID:=1000096 ' Help butttons are broken on Application Input box
    End Sub
    ( I would have saved myself a lot of bother if I had seen this before I did this:
    https://www.excelforum.com/excel-new...ml#post4827566
    )

    _.....
    Using one of the resume statements it is very easy to modify the last error raising code to effectively loop through a number of options: by simply adding Resume Next at the end of the code the last exception is cleared, as is the Err object, and the code continues in normal modus at the next line. So with Resume Next added we can replace the single Err.Raise with a list which will be progressed through. Here an example code,
    Code:
    Sub RaiseErections()
    0 On Error GoTo EmBed
    1 Err.Raise Number:=9999
    2 Err.Raise Number:=11
    3 Err.Raise Number:=12
    4 Err.Raise Number:=vbObjectError        ' vbObjectError.JPG           : https://imgur.com/fdh4ymA
    5 Err.Raise Number:=-2147221504          ' -2147221504.JPG             : https://imgur.com/1kKYjzA
    6 Err.Raise Number:=vbObjectError + 1    ' vbObjectError + 1.JPG       : https://imgur.com/sc9qm8d
    7 Err.Raise Number:=vbObjectError + 500  ' vbObjectError + 500.JPG     : https://imgur.com/7DNiUnR
    8 Err.Raise Number:=vbObjectError + 11   ' vbObjectError + 11.jpg      : https://imgur.com/8rqVpYe
    Exit Sub ' You never come here
    EmBed: ' Error handling code section
    Dim strMsg As String
     Let strMsg = "Number:=   " & Err.Number & vbCr & vbLf & "Description:=    " & Err.Description & vbCr & vbLf & "Source:=  " & Err.Source & vbCrLf & "HelpFile:= """ & Err.HelpFile & """" & vbCrLf & "HelpContext:=    " & Err.HelpContext & vbCr & vbLf & "LastDllError   " & Err.LastDllError
     'MsgBox strMsg
     Debug.Print strMsg
     Debug.Print ' To make a space between each set of infomation
     Resume Next ' We clear the exceütioon, clear the Err object, and continue in normal code running mode at the next Err Raise line
    End Sub




    And here the results as seen in the Immediate window:
    Code:
    Number:=   9999
    Description:=    Anwendungs- oder objektdefinierter Fehler
    Source:=  VBAProject
    HelpFile:= "C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA6\1031\VbLR6.chm"
    HelpContext:=    1000095
    LastDllError   0
    
    Number:=   11
    Description:=    Division durch Null
    Source:=  VBAProject
    HelpFile:= "C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA6\1031\VbLR6.chm"
    HelpContext:=    1000011
    LastDllError   0
    
    Number:=   12
    Description:=    Anwendungs- oder objektdefinierter Fehler
    Source:=  VBAProject
    HelpFile:= "C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA6\1031\VbLR6.chm"
    HelpContext:=    1000095
    LastDllError   0
    
    Number:=   -2147221504
    Description:=    Automatisierungsfehler
    Ungültige OLEVERB-Struktur 
    Source:=  VBAProject
    HelpFile:= "C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA6\1031\VbLR6.chm"
    HelpContext:=    1000440
    LastDllError   0
    
    Number:=   -2147221504
    Description:=    Automatisierungsfehler
    Ungültige OLEVERB-Struktur 
    Source:=  VBAProject
    HelpFile:= "C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA6\1031\VbLR6.chm"
    HelpContext:=    1000440
    LastDllError   0
    
    Number:=   -2147221503
    Description:=    Automatisierungsfehler
    Ungültige Advisemarken 
    Source:=  VBAProject
    HelpFile:= "C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA6\1031\VbLR6.chm"
    HelpContext:=    1000440
    LastDllError   0
    
    Number:=   -2147221004
    Description:=    Automatisierungsfehler
    Ungültige Schnittstellenzeichenfolge 
    Source:=  VBAProject
    HelpFile:= "C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA6\1031\VbLR6.chm"
    HelpContext:=    1000440
    LastDllError   0
    
    Number:=   -2147221493
    Description:=    Automatisierungsfehler
    Das Objekt ist statisch. Der Vorgang ist nicht erlaubt. 
    Source:=  VBAProject
    HelpFile:= "C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA6\1031\VbLR6.chm"
    HelpContext:=    1000440
    LastDllError   0
    The initial 3, or rather 1 and 3, results show that there is a standard description and help file, ( or “page”/ Context thereof ) for any unrecognised number.

    The final 4 are associated with some vbObjectError concept.
    Wherever I have looked, vbObjectError appears to be a constant with value of -2147221504
    I expect that no one remembers what that really is and / or it is probably broken. … a typical answer given is that .. “.. it generates a unique error number… prevents conflict with any existing number and/ or prevents rewrite in the future—when later versions of Visual Basic that use more error numbers.. “
    No one really knows what they mean by conflict in this sense means. In fact it appears the answer was given to them by someone who was given it by someone… if you spend enough time following down the chain you find you come back to the same point, that is to say no one remembers where the rumour started and the original person that started the rumour forgot and later asked someone else that fell for his rumour originally.
    Clearly the results are not suggesting that a non used number is being obtained.
    The results suggest that by trial and error you can find a number that is not being looking to get the first and third error message. The Help for those options suggests that the number is not used

    So you may as well make up numbers that suit any particular logic or idea or organised list that suits you and a description you like.

    Probably the only conclusions from this post is that if I chose to .Raise an error, then I might want to first make a code something similar to the ones in this post but which also have an error of the sort or similar to the one I want to do a customised error handler for. The I can get the standard Properties which I may then chose to use either in their entirety, such as in the case of the Help File path , ( and page number ( context Property ) , or I may chose to modify then somehow, such as in the description in order to be more specific about my particular error.

    I am thinking that the Custom Error handler using the Err object .Raise method is a waste of time, and probably doing the same with Message boxes or Input boxes is probably a lot more intuitive and more versatile. But for completeness I will have a look at a simple example in the next post.
    Last edited by DocAElstein; 03-24-2023 at 09:21 PM.

Similar Threads

  1. Replies: 8
    Last Post: 09-01-2015, 01:50 AM
  2. Difference Between 'On Error GoTo 0' And 'On Error GoTo -1'
    By Transformer in forum Familiar with Commands and Formulas
    Replies: 7
    Last Post: 07-02-2015, 04:07 PM
  3. Replies: 2
    Last Post: 05-14-2013, 01:02 AM
  4. Runtime Error 481 invalid figure when PNG
    By Tony in forum Excel Help
    Replies: 0
    Last Post: 02-12-2013, 12:59 AM
  5. Replies: 10
    Last Post: 04-07-2012, 05:33 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •