News & Tipps zu Microsoft Access

Lesen Sie hier einige der besten Beiträge aus SmartTools Access Weekly sowie ausgewählte Inhalte anderer E-Mail-Newsletter von SmartTools Publishing rund um Microsoft Access.

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.