Du kennst das: Die Daten sehen gut aus. Auf den ersten Blick. Aber wenn Du genauer hinschaust, passt vieles nicht zusammen. Ich bin Sönke SchĂ€fer, der DatenschĂ€fer – und heute zeig ich Dir, wie Du in Access & VBA Komplexe Validierungen sauber programmierst. Nicht am Ende, sondern vor dem Speichern. Klar, nachvollziehbar – und mit trockenem norddeutschem Humor.
Warum Validierung vor dem Speichern?
Weil Du sonst spĂ€ter suchen darfst. Und das will keiner. Wenn Daten erstmal gespeichert sind, ist es zu spĂ€t. Also prĂŒfen wir vorher.
- Pflichtfelder – logisch, ohne geht nix.
- Wertebereiche – Preise unter Null? Nee.
- AbhĂ€ngigkeiten – Wenn A gewĂ€hlt ist, darf B nicht leer sein.
- Redundanzen – Gleicher Kunde, doppelte E-Mail?
Und all das nicht mit Makros oder Feldvalidierung. Sondern kontrolliert im Code.
Die Strategie: Zentral prĂŒfen, dann speichern
Wir machen das so: Ein Formular ruft eine zentrale Funktion auf, die prĂŒft alles. RĂŒckmeldung gibt’s im Klartext. Ohne Blinken, ohne Glitzer.
Das GrundgerĂŒst
Function ValidiereDatensatz(frm As Form) As String Dim meldung As String meldung = "" If IsNull(frm!txtKundenname) Then meldung = meldung & "Kundenname fehlt." & vbCrLf End If If frm!txtBestellwert < 0 Then meldung = meldung & "Bestellwert darf nicht negativ sein." & vbCrLf End If If frm!cboStatus = "Storniert" And IsNull(frm!txtStornoGrund) Then meldung = meldung & "Stornogrund fehlt." & vbCrLf End If ' Weitere Regeln hier ergÀnzen... ValidiereDatensatz = meldungEnd Function
Und so rufst Du das auf
Private Sub Form_BeforeUpdate(Cancel As Integer) Dim fehler As String fehler = ValidiereDatensatz(Me) If fehler <> "" Then MsgBox "Speichern abgebrochen:" & vbCrLf & fehler, vbExclamation, "Validierung" Cancel = True End IfEnd Sub
Mehrere PrĂŒfungen, sauber getrennt
Wenn’s komplexer wird, mach eigene Funktionen fĂŒr Teilbereiche. Dann bleibt der Code lesbar.
Function PruefeLieferadresse(frm As Form) As String Dim m As String If frm!chkLieferung = True Then If IsNull(frm!txtLieferPLZ) Then m = "Lieferadresse unvollstÀndig." & vbCrLf End If End If PruefeLieferadresse = mEnd Function
Im Hauptcode dann einfach:
meldung = meldung & PruefeLieferadresse(frm)
Und was ist mit Lookup-Feldern?
Kannste machen. Aber besser: prĂŒfe auf die FremdschlĂŒssel direkt. Und denk an versteckte Werte.
If IsNull(frm!cboKunde.Value) Then meldung = meldung & "Kunde muss ausgewÀhlt werden." & vbCrLfEnd If
Typische Stolperfallen
- Zu spĂ€te PrĂŒfung (erst beim Speichern auf Server = Mist)
- Zu viele Regeln in einer Funktion = unlesbar
- Fehlermeldungen ohne Klartext
„Wenn der Nutzer raten muss, was fehlt – dann bist Du schuld.“
Fazit vom DatenschÀfer
Komplexe Validierungen in Access mĂŒssen nicht chaotisch sein. Du brauchst Klarheit, saubere Strukturen – und klare RĂŒckmeldungen. Dann klappt’s auch mit sauberen Daten. Wenn Du Hilfe brauchst bei Access, SQL-Server oder Office-Automatisierung – meld Dich. Ich helf Dir, bevor’s brennt.
DatenschĂ€fer: Analyse, Auswertung und Automatisierung fĂŒr KMU im Norden đ