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 🐑

Categories:

Tags:

Comments are closed