Excel - Steuerelement_Exit - Bearbeitung

Hallo,

ich habe eine UserForm bei der u. a. 4 Textfelder hintereinander stehen. Diese Textfelder sind mit „MaxLength“ maskiert, so dass sie (über die Tab-Reihenfolge) automatisch ins nächste Feld wechseln sobald die max. Länge erreicht wurde. Nach dem 4. Textfeld springt er in das entsprechend (jetzt unwichtige) nächste Steuerelement. So weit, so gut.

Für das 3. Textfeld habe ich jetzt noch eine Exit-Anweisung gegeben. Problem: im Normalfall sollen dort 4 Zeichen gesetzt werden (MaxLength wird per Code gesteuert). Manchmal vergesse ich aber die führende Null einzutippen und gebe nur die 3stellige Zahl ein, die dort rein kommt. Mit diesem Exit-Code prüfe ich, ob der eingegebene Text kürzer ist als .MaxLength. Wenn ja, soll er als Textfeld-Inhalt eine führende Null und den bisherigen Textfeld-Inhalt einfügen. Das führt er auch aus.
Aber: wenn er jetzt die führende Null hinzufügt springt der Focus nach Ausführung des Exit-Codes automatisch auf Steuerelement 5 und nicht - wie erhofft - auf das 4. Textfeld. Wird die Zahl 4stellig eingegeben und er führt den Code nicht aus wird der Focus, wie gewünscht, auf das 4. Textfeld gelegt. Selbst wenn ich eingebe Steuerelement4.SetFocus führt er dies nicht aus (oder er macht eben noch etwas, was ich nicht erkenne).

Wie kann ich den Focus aber auch im Fall der Ergänzung (der führenden Null) auf den Focus des 4. Steuerelementes bringen?

danke im Voraus
LG Tobi@s

Hallo Tobi,

da gibt es drei Möglichkeiten:

Ausschalten des Event Handlings in der Exit Prozedur
oder
Setze den Focus in der Exit Prozedur auf das Steuerelement 3
oder setzen des Focus am ende der Exit Prozedur auf das gewünschte Steuerelement.

fg

Dirk.P

Hallo Dirk,

Ausschalten des Event Handlings in der Exit Prozedur

hatte mich gewundert aber ich habe einen Fehler gemacht: Das Programm läuft in Word und nicht in Excel :smile:. Und in Word gibt es das Event Handlings ja leider nicht.

Setze den Focus in der Exit Prozedur auf das Steuerelement 3

probiert. Kein Erfolg

oder setzen des Focus am ende der Exit Prozedur auf das
gewünschte Steuerelement.

probiert. Auch kein Erfolg.

In beiden Fällen springt er auf „Steuerelement5“ und nicht auf „Steuerelement4“. :frowning:

LG Tobi@s

Hallo Tobi,

hab jetzt mal eine Form gebaut. Allerdings kann ich das Problem nicht nachvollziehen. Trotz der Änderung in Exit des Textfeldes geht es brav weiter. Code im Exit Event Handler:

If Len(TextBox2.Text) = 3 Then
TextBox2.Text = TextBox2.Text & „0“
End If

Kannst du mal was Code posten oder mir ein Muster schicken?

fg

Dirk.P

Hallo Dirk,

Kannst du mal was Code posten oder mir ein Muster schicken?

Private Sub txtHNr\_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(txtHNr.Text) "" Then
 txtHNr.Text = "0" & txtHNr.Text
 txtUnterscheidung.SetFocus
End If
End Sub

txtHNr ist mein „drittes“ Textfeld, txtUnterscheidung ist das folgende Textfeld.
Anschließend kommt ein OptionButton.

Folgendes: beim verlassen des zweiten Textfeldes wird eine Zeichenfolge überprüft (im selben Textfeld). Beginnt diese mit einer „9“ soll „txtHNr.MaxLength“ 4 Stellen sein, ansonsten nur 3 Stellen. Dürfte aber für unser Problem unrelevant sein.

Wenn ich jetzt im Textfeld txtHNr die volle Anzahl Zeichen eintrage (3 oder 4) springt er automatisch - so wie es sein soll - zu „txtUnterscheidung“.

Nun kann es sein, dass ich im txtHNr eine (evtl.) führende Null (es kann leider auch sein, dass keine führende Null ist; deshalb kann man diese Null nicht von Anfang an mit hinzufügen) vergesse. Dabei ist es egal ob MaxLength 3 oder 4 ist; in beiden Fällen kann (leider) so etwas vorkommen. Damit ich als Nutzer trotzdem schneller arbeiten kann, war meine Überlegung diese führende Null per Code einzufügen - was als solches ja sogar funktionier :smile:. Diesen Code muss man in einen Code-Block einfügen. Deshalb nahm ich „Exit“. Da nun - vor Ausführung des Codes - die Länge des Inhaltes vom Textfeld nun eine Länge von 2 oder 3 hat (und somit kein automatischer Wechsel zu „txtUnterschied“ durchgeführt wird) benutze ich die Tab-Taste um das Feld zu verlassen. Damit wird der Code ausgelöst und die führende Null wird ergänzt. Aber: der Cursor springt nicht in das Textfeld „txtUnterscheidung“ sondern auf das danach folgende OptionButton!. Selbst wenn ich im obigen Code das „SetFocus“ entferne ändert es nichts daran.

LG