2.4k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.3k Punkte)
Hallo,

in einer Userform habe ich eine TextBox deren Inhalt ich in eine Zelle übernehme:
Private Sub TextBox17_Change()

End Sub

Bevor der Eintrag übernommen wird will ich aber prüfen ob dieser "IBAN"-konform mir "DE" beginnt und 22 Stellen lang ist. Wenn ja, dann ok, sonst soll mich ein Hinweis auf den Fehler aufmerksam machen und mir die Möglichkeit einer Korrektur geben. Wie kann ich das bewerkstelligen, so dass ich anschließend die folgenden TextBoxen der UserForm bearbeiten kann.
Danke für jeden Tipp!!
Gruß A.

9 Antworten

0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo Andreas,

ich würde das nicht mit dem Textbox-Change-Ereignis machen.
Probier mal den folgenden Code aus und mach mal eine Eingabe in der Textbox17, dann siehst du was ich meine:

Private Sub TextBox17_Change()
MsgBox "Hallo", 0
End Sub


Nimm dazu lieber das Exit-Ereignis:

Private Sub TextBox17_Exit(ByVal Cancel As MSForms.ReturnBoolean)

If Len(Me.TextBox17.Text) <> 22 Then
MsgBox "Achtung! Die Länge der IBAN stimmt nicht!", 0, "IBAN Falsch"
Cancel = True
End If

If Left(Me.TextBox17.Text, 2) <> "DE" Then
MsgBox "Achtung! Keine deutsche IBAN!", 0, "Länderkennung falsch"
Cancel = True
End If

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo M.O.,

vielen Dank, das ist genau die Lösung, die ich gesucht habe! Funktioniert einwandfrei. Jetzt muss ich nur noch versuchen auch zu verstehen, wie du das gemacht hast. Das übersteigt meine bisherigen Kenntnisse und ich habe was dazugelernt!
VG Andreas
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo,

noch eine kleine Nachfrage..Wie kann ich in der Msgbox noch die Information der falschen Länge

Len(Me.TextBox17.Text)

unterbringen?
A.
0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo M.O.,

Ich schließe mich der Gratulation an, Du bist für mich einer der Komplettesten in Excelfragen, zumal Du schon mehrmals Probleme gelöst hast, die ich im Web auch nicht nur annähernd recherchieren konnte und glaube mir, diesbezüglich bin ich sehr gründlich.

schönen Tag noch

Gruß
Paul1
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo Andreas,

das kannst du so machen:

MsgBox "Achtung! Die Länge der IBAN stimmt nicht: " & Len(Me.TextBox17.Text), 0, "IBAN Falsch"


@Paul1
Vielen Dank. Ich werde ja richtig rot ;-).

Gruß

M.O.
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo Andreas,

ich habe deinen vorhergehenden Post ganz vergessen. Erklär mal bitte genauer, was du an dem Code nicht verstehst, dann kann man gezielt auf deine Frage eingehen.

Gruß

M.O.
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo M.O.

danke für deine schnelle kompetente Antwort! Ich möchte deine Geduld nicht überstrapazieren, aber da du schon mal gefragt hast :-)

Mir ist die Befehlezeile
Private Sub TextBox17_Exit(ByVal Cancel As MSForms.ReturnBoolean)


komplett neu. Wie es funktioniert, sieht man an dem Beispiel ja recht deutlich. Es wirkt quasi wie eine Schleife aus der ich erst rauskomme, wenn die Bedingung erfüllt ist - oder?
Kannst du diese Funktion noch mal kurz erklären und was ist der Unterschied zwischen einem Code Sub xxx ()
end Sub

und dem Private Sub?
Danke und Guß A.
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo Andreas,

Private Sub ist nur im Modul gültig und kann nicht von Außen aufgerufen werden.

Klicke mal im VBA-Editor auf deine Textbox17. Dann siehst oben links im Fenster (mit dem Pfeil) die Bezeichnung der Textbox. Daneben ist ein anderes Fenster: Klicke mal darauf. Dort kannst du verschiedene Ereignisse auswählen.
Und wenn du dann Exit auswählst, wird dir automatisch die oben dargestellte Private Sub (natürlich ohne den Code) erstellt.
Das ist ähnlich, wie wenn du ein Worksheet-Change oder Workbook-Open-Ereignis verwendest.

Die Schleife besteht nur, weil ich in den Code die Zeilen
Cancel = True

eingefügt habe. Damit wird das Verlassen der Textbox verhindert. Löscht du diese Zeile, dann bekommst du beim Verlassen der Textbox nur den Hinweis mit der Messagebox, falls ein Fehler aufgetreten ist.

Gruß

M.O.
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo,
danke für die zusätzlichen Informationen - wie immer sehr hilfreich!!
Gruß A.
...