Color scheme: Light
You are here: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Forms Object Library » how-to » Fehler von WKL-Steuerelementen in VBA behandeln

Fehler von WKL-Steuerelementen in VBA behandeln

Fangen Sie die Fehler von WKL-Steuerelementen in Ihrem Code so ab wie die Fehler von Access, zeigen Sie den Benutzern statt eines VBA-Dialogfelds eine verständliche Meldung, und geben Sie die Objekte frei, die Sie halten.

Voraussetzungen: WKL Forms Object Library 1.23 oder höher.

Lösungsüberblick

  • Feste Nummern. Jeder Member eines WKL-Steuerelements oder -Objekts, der fehlschlägt, löst einen Laufzeitfehler mit einer festen Nummer aus (Err.Number, Konstanten von WklErrorCode) und Err.Source = "WklForms"; Err.Description enthält einen Text für den Benutzer in der Sprache der Komponenten oder den eigenen Text von Access, wenn Access abgelehnt hat.
  • Nummern außerhalb von WklErrorCode. Ein Fehler, den Access ausgelöst hat, erreicht den Aufrufer mit der eigenen Nummer und dem eigenen Text von Access; Speichermangel ist &H8007000E; jeder andere Fehler, den die Komponenten nicht erwartet haben, ist &H8000FFFF mit „Interner Fehler in der WKL Forms Object Library“ und der Art des Fehlers – melden Sie ihn dem Lieferanten. Gehen Sie in Case Else nicht davon aus, dass jede Nummer eine wke-Konstante ist.
  • On Error wie gewohnt. Behandeln Sie die Fehler mit On Error GoTo in der Prozedur, die den Member aufruft, und entscheiden Sie anhand von Err.Number.
  • Fehler ohne Aufrufer – ein Laden, das beim Zeichnen des Steuerelements fehlschlägt, ein Speichern der Bearbeitung des Benutzers, das die Datenquelle ablehnt – kommen im Ereignis DataError der Struktur- und Rastersteuerelemente und von WklTokenBox an; Response = acDataErrContinue (0) unterdrückt das eigene Meldungsfenster des Steuerelements.
  • Objekte, die Sie halten – eine WklToast in einer WithEvents-Variablen, ein WklLinkManager, ein Recordset, das Sie einem Steuerelement übergeben haben –, geben Sie beim Schließen des Formulars mit Set ... = Nothing frei.
Err.NumberKonstanteBedeutung
&H80040301wkeNotConfiguredDatenquelle oder ein erforderliches Feld fehlt
&H80040302wkeSourceErrorAccess hat beim Lesen oder Speichern einen Fehler gemeldet (Text von Access in Err.Description)
&H80040303wkeDuplicateKeyDoppelter Schlüssel
&H80040304wkeCycleZyklus in der Beziehung zwischen übergeordneten und untergeordneten Elementen
&H80040305wkeKeyNotFoundKein Knoten und kein Datensatz mit diesem Schlüssel
&H80040306wkeInvalidValueUngültiger Wert oder ungültige Datei
&H80040307wkeNotAvailableDer Befehl ist gerade nicht verfügbar (nicht in der Formularansicht oder nicht für den Datensatz mit dem Fokus)

Umsetzung

Eine Befehlsschaltfläche, die die ausgewählten Datensätze eines Rasters löscht, mit einer Meldung für die Fälle, die der Benutzer verstehen kann:

Private Sub cmdDelete_Click()
    On Error GoTo Failed
    Me!Grid1.Object.DeleteSelected
    Exit Sub
Failed:
    Select Case Err.Number
        Case wkeNotAvailable
            MsgBox "Bitte zuerst einen Datensatz auswählen.", vbInformation
        Case wkeSourceError
            MsgBox "Löschen nicht möglich: " & Err.Description, vbExclamation
        Case Else
            MsgBox "Fehler " & Hex(Err.Number) & " (" & Err.Source & "): " & Err.Description, vbCritical
    End Select
End Sub

Eine Ablehnung durch die Datenquelle während der Bearbeitung, angezeigt in der eigenen Statuszeile des Formulars statt in einem Meldungsfenster:

Private Sub Grid1_DataError(ByVal DataErr As Long, ByVal Description As String, Response As Integer)
    Me!lblStatus.Caption = Description
    Response = acDataErrContinue
End Sub

Freigeben, was das Formular hält:

Private WithEvents mToast As WklToast
 
Private Sub Form_Load()
    Set mToast = New WklToast
End Sub
 
Private Sub Form_Close()
    Set mToast = Nothing
End Sub

Hinweise

  • Vergleichen Sie mit den Konstanten, nicht mit negativen Dezimalzahlen: Err.Number von &H80040306 ist in VBA -2147220730, und die Konstanten erfordern den Verweis auf WKL Forms Object Library (den Access beim Einfügen eines Steuerelements setzt).
  • Ein nicht behandelter Fehler in einer Ereignisprozedur zeigt das VBA-Dialogfeld für Laufzeitfehler, wie bei jedem Access-Ereignis; behandeln Sie Fehler auch in Ereignisprozeduren.
  • Code, der während eines laufenden Ereignisses desselben Steuerelements einen Member aufruft: Ein Datensatzbefehl von WklGrid, WklTreeList oder WklGantt läuft dann erst nach der Ereignisprozedur; ein Fehler während seiner Ausführung erreicht den aufrufenden Code daher nicht. Nur seine Verfügbarkeit wird sofort geprüft und löst beim Aufruf wkeNotAvailable aus.
  • Fehlertexte folgen der Sprache der Komponenten (Englisch, Deutsch, Slowenisch, Kroatisch oder Italienisch; Englisch, wenn keine zutrifft), wie ihre übrige Benutzeroberfläche. Entscheiden Sie anhand von Err.Number, niemals anhand des Texts: Die Nummer bleibt in jeder Sprache gleich. Die Sprache wählen: Sprache der Komponenten festlegen.

Verwandte Themen

de/wiki/msaccess/comctl/how-to/handle-errors-of-wkl-controls.txt · Last modified: by Wolfgang van der Stille