Farbschema: Dunkel
Sie befinden sich hier: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Forms Object Library » how-to » Zelleingaben prüfen

Zelleingaben prüfen

Weisen Sie einen Wert ab, den der Benutzer in eine Zelle eines WklGrid, einer WklTreeList oder eines WklGantt eingibt, wenn er gegen eine Regel verstößt, zeigen Sie den Grund an der Zelle an, und reagieren Sie, nachdem ein Wert gespeichert wurde.

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

Lösungsüberblick

  • Regeln der Spalte für das, was Access je Feld anbietet: Required, MaxLength (standardmäßig die Feldgröße der Datenherkunft), Pattern (ein regulärer Ausdruck), MinValue und MaxValue, ValueList sowie ValidationText für eine eigene Meldung. Legen Sie sie auf der Designerseite Spalten (Abschnitt der markierten Spalte) oder per Code fest.
  • Was geschieht: Ein Wert, der gegen eine Regel verstößt, wird nicht geschrieben. Wie bei einer Gültigkeitsregel in Access lässt sich die Zelle nicht verlassen, es erscheint aber kein Meldungsfeld: Die Zelle zeigt einen roten Rahmen, das Fehlersymbol und die Meldung als QuickInfo, und die Fehlerleiste unter den Datensätzen zählt die Fehler („1 Fehler“ usw.) und springt zum ersten. Esc verwirft die Eingabe. ValidateMode legt fest, wann eine Zelle geprüft wird: beim Verlassen (Standardwert), während der Eingabe als Markierung oder bei der Zeile für einen neuen Datensatz erst beim Speichern der Zeile.
  • Eigene Regeln – über mehrere Felder oder mit einem Nachschlagen in einer anderen Tabelle – in ValidateCell: Korrigieren Sie NewValue, weisen Sie mit Cancel = True ab, und nennen Sie den Grund mit SetError.
  • Nach dem Speichern tritt AfterCellUpdate ein. Fehler der Datenquelle gehen an DataError, und die Zelle behält den Text der Quelle.

Umsetzung

Regeln der Spalten, einmalig in der Entwurfsansicht oder in Form_Load gesetzt:

Private Sub Form_Load()
    With Me!Grid1.Object
        .Columns("Kunde").Required = True             ' MaxLength 0: the field size applies
        .Columns("Kuerzel").Pattern = "[A-Z]{2,4}"
        .Columns("Kuerzel").ValidationText = "Zwei bis vier Großbuchstaben"
        .Columns("Menge").MinValue = 1
        .Columns("Menge").MaxValue = 1000
        .Columns("Status").ValueList = "neu;aktiv;gesperrt"
    End With
End Sub

Eine eigene Regel über zwei Felder, mit dem Grund an der Zelle:

Private Sub Grid1_ValidateCell(ByVal Key As Variant, ByVal Column As String, NewValue As Variant, Cancel As Integer)
    If Column = "Bis" Then
        If Not IsNull(NewValue) And NewValue < Me!Grid1.Object.CellValue(Key, "Von") Then
            Cancel = True
            Me!Grid1.Object.SetError Key, "Bis", "„Bis“ liegt vor „Von“."
        Else
            Me!Grid1.Object.SetError Key, "Bis", ""          ' an empty text removes the error
        End If
    End If
End Sub
 
Private Sub Grid1_AfterCellUpdate(ByVal Key As Variant, ByVal Column As String)
    Me!txtTotal = Me!Grid1.Object.SummaryValue("Menge")
End Sub

Hinweise

  • Die Zeile für einen neuen Datensatz prüft vor dem Speichern jede Spalte, auch ein Pflichtfeld, das der Benutzer nie eingegeben hat. Die Zeile wird nicht gespeichert, behält den Fokus und zeigt die Fehler an ihren Zellen.
  • Vorhandene Datensätze werden Zelle für Zelle gespeichert; ihre Zellen werden daher in jedem ValidateMode beim Verlassen geprüft.
  • Per Code geschriebene Werte (CellValue = …) werden nicht geprüft und lösen keine Ereignisse aus; die Regeln gelten für die Eingaben des Benutzers. UI Automation (ValuePattern.SetValue) wird wie eine Eingabe geprüft und mit E_INVALIDARG abgewiesen.
  • Sprachausgaben lesen die Meldung vor: Die Zelle meldet sie als ihren Status und ist für ihr Formular ungültig, und die Fehlerleiste ist ein Live-Bereich.
  • ErrorCount, ErrorSummary, ErrorText, GoToFirstError, ClearErrors und das Ereignis ValidationChange lassen Ihre eigenen Schaltflächen den Fehlern folgen. Für Prüfungen auf einem Access-Formular – etwa dem Bearbeitungsformular des Rasters – verwenden Sie WklValidator (siehe Access-Formular mit WklValidator prüfen).
  • Bearbeiten ist möglich, wenn AllowEditing True ist (Standardwert) und die Spalte nicht ReadOnly ist; Gruppenzeilen sind nie bearbeitbar.

Verwandte Themen

de/wiki/msaccess/comctl/how-to/validate-cell-input.txt · Zuletzt geändert: von Wolfgang van der Stille