Beitrag aus SmartTools Access Weekly
Access-Fehlermeldungen richtig interpretieren
Access 365 2021 2019 2016 2013 2010
Wenn in einer VBA-Routine ein Fehler auftritt und Sie dazu eine Meldung der Form MsgBox "Problem: " & Err.Description
anzeigen lassen, wird häufig der wenig hilfreiche Text "Anwendungs- oder objektdefinierter Fehler" ausgegeben. Wir zeigen in unserem Tipp, wie Sie dem Problem durch aussagekräftigere Fehlermeldungen schneller auf den Grund gehen können. Wenig bekannt ist eine Erweiterung in Access, die für anwendungs- oder objektspezifische Fehler einspringt und speziell den für Access gültigen Fehlertext liefert.
Dabei handelt es sich um die Funktion "AccessError()". Dieser Funktion wird als Parameter die ursprüngliche Fehlernummer gemäß "Err.Number" übergeben. Gibt es dazu einen Access-spezifischen Fehlertext, wird er als Ergebnis gemeldet; andernfalls bleibt es bei dem Text "Anwendungs- oder objektdefinierter Fehler".
Um "AccessError()" in Ihren Fehlerbehandlungsroutinen einzusetzen, sind zusätzliche Abfragen notwendig. Normalerweise verwenden Sie beispielsweise eine Konstruktion wie die folgende:
On Error Goto Proc_Error
Proc_Exit:
Exit Sub
Proc_Error:
Select Case Err.Number
.....
Case 70: strMsg = "Unzureichende Zugriffsrechte..."
.....
End Select
Beep
MsgBox "Problem: " & strMsg
Resume Proc_Exit
Alternativ wird eventuell auch ein "On Error Resume Next" mit einer Abfrage "If Err <> 0 Then" an kritischen Stellen eingesetzt. In beiden Fällen muss statt einer direkten Auswertung von "Err.Number" zuvor die folgende Abfrage und ggf. der Funktionsaufruf mit Zuweisung vorgeschaltet werden:
Proc_Error:
If Err.Description = _
"Anwendungs- oder objektdefinierter Fehler" Or _
Err.Description = _
"Application-defined or object-defined error" Then
strMsg = AccessError(Err.Number)
Else
Select Case Err.Number
.....
Case 70: strMsg = "Unzureichende Zugriffsrechte..."
.....
End Select
End If
Beep
MsgBox "Problem: " & strMsg
Resume Proc_Exit
Hier wird zunächst geprüft, ob der Fehlertext "Anwendungs- oder objektdefinierter Fehler" lautet. Ist das der Fall, liefert "AccessError(Err.Number)" den Access-Fehlertext; andernfalls erfolgt die Behandlung beispielsweise in einer "Select-Case"-Konstruktion.