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 = meldung
End 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 If
End 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 = m
End 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." & vbCrLf
End 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 đ
Comments are closed