DOCUMENT:Q129939 11-JAN-2001 [vbwin] TITLE :PRB: Err.Raise Doesn't Always Generate Expected Error PRODUCT :Microsoft Visual Basic for Windows PROD/VER:4.00 OPER/SYS: KEYWORDS: ====================================================================== ------------------------------------------------------------------------------- The information in this article applies to: - Microsoft Visual Basic Standard Edition, 32-bit, for Windows, version 4.0 - Microsoft Visual Basic Professional Edition, 16-bit, for Windows, version 4.0 - Microsoft Visual Basic Professional Edition, 32-bit, for Windows, version 4.0 - Microsoft Visual Basic Enterprise Edition, 16-bit, for Windows, version 4.0 - Microsoft Visual Basic Enterprise Edition, 32-bit, for Windows, version 4.0 ------------------------------------------------------------------------------- SYMPTOMS ======== Using Err.Raise to generate a specific run-time error may generate a "Application-defined or object-defined error" message rather than the expected text that corresponds to the error number. CAUSE ===== Err.Raise only fills in the Source, Description, HelpFile, and HelpContext properties of the Err object for Visual Basic for Applications errors. For other errors, it returns "Application-defined or object-defined error." STATUS ====== This behavior is by design. MORE INFORMATION ================ Err.Raise is useful for generating errors when writing OLE Automation objects because the Err object gives the programmer and user more information than is possible if you generate errors with the Error statement. Whether or not to use Err.Raise in code that is not related to OLE Automation depends on if you want the additional information returned by using Err.Raise versus the Error statment. Err.Raise is most useful for providing the user with information on a user-defined error when writing code for an OLE Automation object; it provides the user with information on a user-defined error. Please see the Raise Method topic in the Visual Basic Help menu for an example on using Err.Raise with user-defined errors in an OLE Automation application. The following example demonstrates the information that can be obtained using Err.Raise such as the Source property, Description property, and other properties of the Err Object. In addition, it shows the differences in behavior of Error.Raise when raising Visual Basic for Applications errors versus non-Visual Basic for Application errors. Steps to Reproduce Behavior --------------------------- 1. Start a new project in Visual Basic. Form1 is created by default. 2. Add the following code to the Form_Click event procedure: Private Sub Form_Load() On Error Resume Next Err.Clear Err.Raise 6 'Err.Raise 381 If Err.Number <> 0 Then Msg = "Error # " & Str(Err.Number) & " was generated by " & _ Err.Source & Chr(13) & Err.Description MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext End If End Sub 3. Run the program. The error "Overflow" is correctly generated. 4. Change the line containing "Err.Raise 6" into a comment, and uncomment the line containing "Err.Raise 381". 5. Run the program. Rather than the expected error "Invalid property array index," the error "Application-defined or object-defined error" is generated. Visual Basic for Applications Errors ------------------------------------ The following is a list of Visual Basic for Applications errors. For a complete list of trappable errors, please search for the "Trappable errors" topic in the Help file. 3 Return without GoSub 5 Invalid procedure call 6 Overflow 7 Out of memory 9 Subscript out of range 10 Duplicate definition 11 Division by zero 12 Precision lost converting Variant 13 Type mismatch 14 Out of string space 16 String expression too complex 17 Can't perform requested operation 18 User interrupt occurred 20 Resume without error 28 Out of stack space 35 Sub or Function not defined 47 Too many DLL application clients 48 Error in loading DLL 49 Bad DLL calling convention 51 Internal error 52 Bad file name or number 53 File not found 54 Bad file mode 55 File already open 57 Device I/O error 58 File already exists 59 Bad record length 61 Disk full 62 Input past end of file 63 Bad record number 67 Too many files 68 Device unavailable 70 Permission denied 71 Disk not ready 74 Can't rename with different drive 75 Path/File access error 76 Path not found 91 Object variable not Set 92 For loop not initialized 93 Invalid pattern string 94 Invalid use of Null 423 Property or method not found 424 Object required 430 Class doesn't support OLE Automation 438 Object doesn't support this property or method 440 OLE Automation error 445 Object doesn't support this action 446 Object doesn't support named arguments 447 Object doesn't support current locale setting 448 Named argument not found 449 Argument not optional 450 Wrong number of arguments 451 Object not a collection 452 Invalid ordinal 453 Function not defined in specified DLL 454 Code resource not found 455 Code resource lock error 456 Get and Put cannot be used with arrays 457 Can't create object Additional query words: 4.00 vb4win vb4all ====================================================================== Keywords : Technology : kbVBSearch kbAudDeveloper kbVB400Search kbVB400 kbVB16bitSearch Version : 4.00 Issue type : kbprb ============================================================================= THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY. Copyright Microsoft Corporation 2001.