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 🐑

Categories:

Tags:

Comments are closed