Office-Fragen.de

Normale Version: Textbox auf Anzahl der Zeichen prüfen
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Code:
Private Sub Pg2txtSollkonto_AfterUpdate()
    If Len(Pg2txtSollkonto) <> 4 Then
        MsgBox "Die Kontobezeichnung besteht aus 4 Zahlen!", vbOKOnly Or vbExclamation, "Bitte Eingabe überprüfen"
        With Pg2txtSollkonto
            .SetFocus
            .SelStart = 0
            .SelLength = Len(Pg2txtSollkonto)
        End With
    End If
End Sub

Guten Morgen allerseits, nach dem Verlassen einer Textbox per Tab-Taste soll die Anhzahl der Zeichen auf 4 geprüft werden. Falls die Bedingung nicht erfüllt ist wird der Text markiert.
Leider springt bei obigem Code der Cursor nach dem Verlassen der Textbox per Tab-Taste in die nächste Textbox ohne den Text zu markieren. Wo ist der Fehler?

Danke
Stefan
Hallo,

das Event, das du suchst, heißt ...

Code:
_BeforeUpdate()
Sabina
Hallo Sabina, das klingt gut.... passt aber trotzdem nicht.
Code:
Private Sub Pg2txtSollkonto_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    If Len(Pg2txtSollkonto) <> 4 Then
        MsgBox "Die Kontobezeichnung besteht aus 4 Zahlen!", vbOKOnly Or vbExclamation, "Bitte Eingabe überprüfen"
        With Pg2txtSollkonto
            .SetFocus
            .SelStart = 0
            .SelLength = Len(Pg2txtSollkonto)
        End With
    End If
End Sub

Der Cursor springt trozdem in die nächste Textbox und der Text wird auch nicht markiert.
Laut MS-Hilfe:

Zitat:Wenn Sie das Abbrechen-Argument auf True festlegen, bleibt der Fokus auf dem Steuerelement, und weder das AfterUpdate-Ereignis noch das Exit-Ereignis tritt ein.


Evtl. ist das die Ursache? Wie wird Cancel auf True gesetzt? Cancel = True? An welcher Stellle im Code?

Danke
Stefan
Hm, die Msg-Box ist das Problem.
Cancel = True und die Msg-Box deaktiviert: dann läuft der Code so wie er sollte. Vielleicht fällt mir noch eine Lösung eine wie es mit Msg-Box funzt....
Moin!
Ich würde das Exit-Event nehmen:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With TextBox1
  If Len(.Text) <> 4 Then
    MsgBox "Die Kontobezeichnung besteht aus 4 Zahlen!" & vbNewLine & _
      .Text & " besteht aus " & Len(.Text) & " Zeichen!"
    Cancel = True
    .SelStart = 0
    .SelLength = Len(.Text)
  End If
End With
End Sub

Gruß Ralf