Ken Ismert
KIsmert at texassystems.com
Mon Nov 14 14:20:00 CST 2005
Tony, Here's some form-level error handling code I have written. I just drop into my forms when I need form-level error handling. You can call if from any procedure in the form, and hook it to the Form_Error event. * It uses Screen.ActiveControl to find the offending control * It assumes you have descriptive text in the control's .ValidationText field You can comment out parts you don't need, and customize the error messages as you see fit. Not fancy, but gets the job done. -Ken <code> ' Provides Customizable List of Errors for Form. Can be ' called from Procedure error handlers, or Form_Error ' ' Automatically handles User-defined errors in the range of ' vbObjectError To (vbObjectError + 65535) ' ' Call from Procedure error handler: ' ErrorDisplay "ProcName" ' ' Call from Form_Error: ' Response = acDataErrContinue ' ErrorDisplay Me.Name & ".Form_Error", DataErr ' Private Sub ErrorDisplay(Optional ByVal sCalledBy As String = "", _ Optional ByVal lAccessFormError As Long = 0) Dim rCtl As Access.Control Dim lErrNumber As Long Dim sErrDescription As String Dim sErrSource As String ' Record Error If Err.Number <> 0 Then lErrNumber = Err.Number sErrDescription = Err.Description sErrSource = Err.Source Else Debug.Assert lAccessFormError <> 0 lErrNumber = lAccessFormError sErrDescription = AccessError(lAccessFormError) sErrSource = "" End If If sCalledBy > " " Then sErrSource = sCalledBy & vbCrLf & sErrSource End If ' Resets Err object On Error GoTo HandleErr Select Case lErrNumber Case pcErrVBInputMask Set rCtl = Screen.ActiveControl MsgBox rCtl.ValidationText, vbInformation, AppTitle Case pcErrJetFieldRequired ' Use "Not Is Null" validation on field Set rCtl = Screen.ActiveControl MsgBox rCtl.ValidationText, vbInformation, AppTitle Case pcErrJetDuplicateValues ' Duplicate Item number for BOM MsgBox "Duplicate Item Number" & vbCr & vbCr _ & "Item " & txtItem & " is already in this BOM." & vbCr & vbCr _ & "Enter a unique new Item Number.", vbExclamation, AppTitle Case pcErrJetFieldValidation, pcErrJetValidation, pcErrJetAppError ' Validation failed Set rCtl = Screen.ActiveControl MsgBox rCtl.ValidationText, vbInformation, AppTitle Case pcErrJetCantSaveObject MsgBox "Changes to this record are invalid and will not be saved.", vbExclamation, AppTitle Case pcErrVBObjectVarNotSet ' Some earlier error forced reset of Interpreter MsgBox "Warning: " & vbCr & vbCr _ & "This form has experienced a severe error," & vbCr _ & "and will be closed." & vbCr & vbCr _ & "Call IT with a description of the previous error.", vbCritical, AppTitle DoCmd.Close acForm, Me.Name, acSavePrompt Case vbObjectError To (vbObjectError + 65535) ' Friendly Object Errors MsgBox sErrDescription, vbExclamation, AppTitle Case Else MsgBox "Error: " & lErrNumber & vbCrLf _ & sErrDescription & vbCrLf _ & "Source: " & sErrSource, vbCritical, AppTitle End Select Exit Sub HandleErr: MsgBox "Error: " & Err.Number & vbCrLf _ & Err.Description & vbCrLf _ & "Source: ErrorDisplay" & vbCrLf & Err.Source, vbCritical, AppTitle Exit Sub End Sub </code> -----Original Message----- From: Tony Septav [mailto:iggy at nanaimo.ark.com] Sent: Sunday, November 13, 2005 2:46 PM To: accessd at databaseadvisors.com Subject: [AccessD] Trap for Error Hey All Thanks for your responses. That is what I was inquring about, the error message does not seem to be fired by any control event (but I will try them all again, I may have missed something), but rather during the process of pressing Ctrl V to paste the text into the textbox. Anyway onwards and upwards, thanks again.