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 If
End 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 If
End 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 If
End 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 PruefeEingabe
End Sub
Private Sub txtPLZ_LostFocus()
Call PruefeEingabe
End Sub
Private Sub PruefeEingabe()
If Len(Me!txtName) > 0 And Len(Me!txtPLZ) > 0 Then
Me!btnWeiter.Enabled = True
Else
Me!btnWeiter.Enabled = False
End If
End 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 đ
Comments are closed