Komplexe Validierungsregeln vor dem Speichern programmieren

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 🐑

Kategorien: