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),MinValueundMaxValue,ValueListsowieValidationTextfü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.
ValidateModelegt 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 SieNewValue, weisen Sie mitCancel = Trueab, und nennen Sie den Grund mitSetError. - Nach dem Speichern tritt
AfterCellUpdateein. Fehler der Datenquelle gehen anDataError, 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
ValidateModebeim 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 mitE_INVALIDARGabgewiesen. - 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,ClearErrorsund das EreignisValidationChangelassen Ihre eigenen Schaltflächen den Fehlern folgen. Für Prüfungen auf einem Access-Formular – etwa dem Bearbeitungsformular des Rasters – verwenden SieWklValidator(siehe Access-Formular mit WklValidator prüfen).- Bearbeiten ist möglich, wenn
AllowEditingTrue ist (Standardwert) und die Spalte nichtReadOnlyist; Gruppenzeilen sind nie bearbeitbar.
Verwandte Themen
- API-Referenz (Englisch): WklColumn (
Required,MaxLength,Pattern,MinValue,MaxValue,ValueList,ValidationText), WklTreeList (ValidateMode,SetError,ErrorCount,ValidateCell,ValidationChange), Enumerationen (WklValidateMode)
de/wiki/msaccess/comctl/how-to/validate-cell-input.txt · Zuletzt geändert: von Wolfgang van der Stille