Moin. Ich bin Sönke SchĂ€fer, der DatenschĂ€fer. Heute geht’s um ein Thema, das vielen Entwickler:innen in KMUs unter den NĂ€geln brennt: Wie erkenne ich sauber, wann ein Feld verlassen wird – und was kann ich dann tun?
Access hat dafĂŒr klassische Events wie AfterUpdate und LostFocus. Aber manchmal reicht das nicht. Du brauchst Kontrolle. Du willst wissen: Hat der Nutzer das Feld wirklich verlassen? Oder hat er nur mal draufgeklickt und ist dann wieder raus?
Warum „Focus Lost“ oft mehr ist als ein kosmetischer Trigger
- Du willst PlausibilitĂ€ten sofort prĂŒfen
- Du willst bestimmte Buttons erst aktivieren, wenn etwas eingegeben wurde
- Du willst nach einem Wert andere Felder automatisch fĂŒllen
Klar, das geht auch mit AfterUpdate. Aber nicht immer. Denn das feuert nur bei Ănderungen – nicht beim Verlassen.
Unterschied: LostFocus vs. Exit vs. AfterUpdate
- LostFocus: Immer, wenn das Feld verlassen wird. Auch ohne Ănderung.
- Exit: Wird ausgelöst, bevor der Fokus wechselt – hier kannst Du den Wechsel abbrechen.
- AfterUpdate: Nur, wenn sich der Wert geÀndert hat.
Wenn Du also immer reagieren willst, nimm LostFocus. Wenn Du nur bei echter Eingabe prĂŒfen willst: AfterUpdate.
Praxisbeispiel: FeldprĂŒfung bei Fokusverlust
Private Sub txtArtikelnummer_LostFocus() If Len(Me!txtArtikelnummer) < 5 Then MsgBox "Artikelnummer zu kurz.", vbExclamation End IfEnd Sub
Das wirkt sofort – auch wenn der Nutzer nur reinschaut und gleich weiterspringt. Ideal fĂŒr Pflichtfelder oder PrĂŒfungen auf PlausibilitĂ€t.
Beispiel: Fokuswechsel verhindern mit Exit
Private Sub txtPLZ_Exit(Cancel As Integer) If IsNull(Me!txtPLZ) Then MsgBox "PLZ darf nicht leer sein." Cancel = True End IfEnd Sub
Mit Cancel = True verhinderst Du, dass der Fokus wechselt. Der Cursor bleibt im Feld, bis der Nutzer etwas eingibt.
neue Möglichkeiten ab Access 2016+
Seit Access 2016 gibt’s stabilere Kombinationen von Events – und du kannst z. B. im Form_Current dynamisch Ereignisse zuweisen oder deaktivieren.
Private Sub Form_Current() If IsNull(Me!txtStatus) Then Me!btnSenden.Enabled = False Else Me!btnSenden.Enabled = True End IfEnd Sub
Das wirkt mit Fokusereignissen zusammen wie ein Schalter: Nur wenn alles passt, wird die Aktion freigeschaltet.
Pro-Tipp: Kombinierte Event-Logik aufbauen
Du willst mehrere Felder prĂŒfen, bevor etwas aktiviert wird? Dann mach’s modular:
Private Sub txtName_LostFocus() Call PruefeEingabeEnd SubPrivate Sub txtPLZ_LostFocus() Call PruefeEingabeEnd SubPrivate Sub PruefeEingabe() If Len(Me!txtName) > 0 And Len(Me!txtPLZ) > 0 Then Me!btnWeiter.Enabled = True Else Me!btnWeiter.Enabled = False End IfEnd Sub
So sparst Du Dir doppelten Code und behÀltst die Logik zentral.
Fazit vom DatenschÀfer
Fokusereignisse sind unterschĂ€tzt. Richtig eingesetzt bringen sie Klarheit und Kontrolle in Deine Formulare. Gerade in KMU-Projekten, wo die OberflĂ€che oft der einzige Schutz gegen Chaos ist. Wenn Du sauber reagierst, sparst Du Nachfragen, RĂŒcklĂ€ufer und schlechte Daten.
Wenn Du willst, helf ich Dir gern beim Aufbau von robusten Formularen mit smarter Logik. Nicht laut, aber wirksam. Norddeutsch eben.
DatenschĂ€fer: Analyse, Auswertung und Automatisierung fĂŒr KMU im Norden đ