Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: nur bestimmte zahlen Buchstaben in Textbox zulasse

nur bestimmte zahlen Buchstaben in Textbox zulasse
08.02.2019 13:00:00
Dirk
Hallo
kann ich unter Excel/VBA für eine Textbox vorgeben, wie der Inhalt auszusehen hat?
Ich würde gerne nur Eingaben nach folgendem Schema zulassen.
x steht für einen Buchstaben, 0 steht für eine Zahl
Die Eingabe soll folgendermaßen aussehen: X00-XX00-X00
Bindestriche sollen am liebsten automatisch eingefügt werden.
Es soll am besten nur eine Eingabe nach diesem Schema zugelassen werden, alternativ vor dem Eintragen in das Tabellenblatt überprüft werden, ob der Inhalt der Textbox korrekt ist.
Vielen Dank
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: nur bestimmte zahlen Buchstaben in Textbox zulasse
08.02.2019 14:17:36
Daniel
HI
eine nachträgliche Prüfung könnte so aussehen:
(hier mal nur für Großbuchstaben)

IF Eingabe Like "[A-Z]##-[A-Z][A-Z]##-[A-Z]##" Then
bei Like ist das "#" der Platzhalter für genau eine Ziffer.
sollen an einer bestimmten Stelle mehrere verschiedene Zeichen zulässig sein (aber nicht alle), so drückt man dass über die eckigen Klammern aus.
jedes Eckige-Klammern-Paar steht für eine Stelle in der Zeichenkette, innerhalb der klammern werden alle zulässigen Zeichen gelistest. Hierbei ist auch ein "von-bis" als Abkürzung zulässig.
Gruß Daniel
Anzeige
AW: nur bestimmte zahlen Buchstaben in Textbox zulasse
08.02.2019 15:12:05
Nepumuk
Hallo Dirk,
direkt bei der Eingabe kannst du das so machen:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case TextBox1.TextLength
        Case 0, 4, 5, 9
            TextBox1.Text = TextBox1.Text & UCase$(IsLetter(KeyAscii.Value))
        Case 1, 2, 6, 7, 10, 11
            TextBox1.Text = TextBox1.Text & IsNumber(KeyAscii.Value)
    End Select
    If TextBox1.TextLength = 3 Or TextBox1.TextLength = 8 Then TextBox1.Text = TextBox1.Text & "-"
    KeyAscii = 0
End Sub

Private Function IsNumber(ByVal pvlngKey As Long) As String
    Select Case pvlngKey
        Case 48 To 57
            IsNumber = Chr$(pvlngKey)
        Case Else
            IsNumber = vbNullString
    End Select
End Function

Private Function IsLetter(ByVal pvlngKey As Long) As String
    Select Case pvlngKey
        Case 65 To 90, 97 To 122, 196, 214, 220, 223, 228, 246, 252
            IsLetter = Chr$(pvlngKey)
        Case Else
            IsLetter = vbNullString
    End Select
End Function

Gruß
Nepumuk
Anzeige
AW: nur bestimmte zahlen Buchstaben in Textbox zulasse
11.02.2019 07:28:44
Dirk
Hallo Nepumuk
Tut mir leid das ich mich jetzt erst melde. Hatte meine Zugangsdaten liegen lassen.
Das Beispiel von Dir ist perfekt. Es macht das genau so wie ich mir das vorgestellt habe.
Vielen Dank
Teile Deines Code verstehe ich. Was mir nicht einleuchtet ist was an diesen Stellen passiert. Wäre es möglich das Du mir das kurz erklärst?:
(ich hoffe man kann erkennen welche Stellen fett und kursiv sind)
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case TextBox1.TextLength
Case 0, 4, 5, 9
TextBox1.Text = TextBox1.Text & UCase$(IsLetter(KeyAscii.Value))
Case 1, 2, 6, 7, 10, 11
TextBox1.Text = TextBox1.Text & IsNumber(KeyAscii.Value)
End Select
If TextBox1.TextLength = 3 Or TextBox1.TextLength = 8 Then TextBox1.Text = TextBox1.Text & " _
KeyAscii = 0
End Sub
Private Function IsNumber(ByVal pvlngKey As Long) As String
Select Case pvlngKey
Case 48 To 57
IsNumber = Chr$(pvlngKey)
Case Else
IsNumber = vbNullString
End Select
End Function
Private Function IsLetter(ByVal pvlngKey As Long) As String
Select Case pvlngKey
Case 65 To 90, 97 To 122, 196, 214, 220, 223, 228, 246, 252
IsLetter = Chr$(pvlngKey)
Case Else
IsLetter = vbNullString
End Select
End Function

Anzeige
AW: nur bestimmte zahlen Buchstaben in Textbox zulasse
11.02.2019 07:49:59
Nepumuk
Hallo Dirk,
so verständlich?
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case TextBox1.TextLength
            'Wenn 0, 4, 5 oder 9 Zeichen in der Textbox sind dann kommt ein Buchstabe
        Case 0, 4, 5, 9
            'füge dem vorhandenen Text in der Box den Buchstaben an
            'UCase$ macht aus kleinen Buchstaben große
            TextBox1.Text = TextBox1.Text & UCase$(IsLetter(KeyAscii.Value))
            'Wenn 1, 2, 6, 7,10 oder 11 Zeichen in der Textbox sind dann kommt eine Zahl
        Case 1, 2, 6, 7, 10, 11
            'füge dem vorhandenen Text in der Box die Zahl an
            TextBox1.Text = TextBox1.Text & IsNumber(KeyAscii.Value)
    End Select
    'Wenn 3 oder 8 Zeichen in der Textbox sind wird ein - eingefügt
    If TextBox1.TextLength = 3 Or TextBox1.TextLength = 8 Then TextBox1.Text = TextBox1.Text & "-"
    'Setze die Eingabe auf 0 damit das Zeichen nicht eingefügt wird
    KeyAscii = 0
End Sub

Private Function IsNumber(ByVal pvlngKey As Long) As String
    Select Case pvlngKey
            'die Ascii-Zeichen 48 bis 57 sind die Zahlen 0 bis 9
        Case 48 To 57
            'die Funktion gibt die eingegebene Zahl zurück
            IsNumber = Chr$(pvlngKey)
        Case Else
            'bei allen anderen Zeichen wird ein leeerer String zurückgegeben
            IsNumber = vbNullString
    End Select
End Function

Private Function IsLetter(ByVal pvlngKey As Long) As String
    Select Case pvlngKey
            'die Zahlen stehen für die Zeichen A-Z a-z ÄÖÜ äöü ß
        Case 65 To 90, 97 To 122, 196, 214, 220, 223, 228, 246, 252
            'die Funktion gibt den eingegebenen Buchstaben zurück
            IsLetter = Chr$(pvlngKey)
        Case Else
            'bei allen anderen Zeichen wird ein leeerer String zurückgegeben
            IsLetter = vbNullString
    End Select
End Function

Wenn nicht, dann stell bitte eine konkrete Frage zu einzelnen Zeilen.
Gruß
Nepumuk
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Nur bestimmte Zahlen und Buchstaben in einer Textbox zulassen


Schritt-für-Schritt-Anleitung

Um in Excel VBA nur bestimmte Buchstaben und Zahlen in einer Textbox zuzulassen, kannst du folgende Schritte ausführen:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge eine UserForm hinzu:

    • Klicke mit der rechten Maustaste im Projekt-Explorer auf dein Projekt und wähle Einfügen > UserForm.
  3. Füge eine TextBox zur UserForm hinzu:

    • Wähle das TextBox-Tool aus der Toolbox und ziehe es auf die UserForm.
  4. Füge den VBA-Code hinzu:

    • Doppelklicke auf die TextBox und füge den folgenden Code ein:
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
       Select Case TextBox1.TextLength
           Case 0, 4, 5, 9
               TextBox1.Text = TextBox1.Text & UCase$(IsLetter(KeyAscii))
           Case 1, 2, 6, 7, 10, 11
               TextBox1.Text = TextBox1.Text & IsNumber(KeyAscii)
       End Select
       If TextBox1.TextLength = 3 Or TextBox1.TextLength = 8 Then
           TextBox1.Text = TextBox1.Text & "-"
       End If
       KeyAscii = 0
    End Sub
    
    Private Function IsNumber(ByVal pvlngKey As Long) As String
       Select Case pvlngKey
           Case 48 To 57
               IsNumber = Chr$(pvlngKey)
           Case Else
               IsNumber = vbNullString
       End Select
    End Function
    
    Private Function IsLetter(ByVal pvlngKey As Long) As String
       Select Case pvlngKey
           Case 65 To 90, 97 To 122, 196, 214, 220, 223, 228, 246, 252
               IsLetter = Chr$(pvlngKey)
           Case Else
               IsLetter = vbNullString
       End Select
    End Function
  5. Teste die UserForm:

    • Drücke F5, um die UserForm auszuführen und teste die Eingabe in der TextBox.

Häufige Fehler und Lösungen

  • Fehler: Text wird nicht wie gewünscht formatiert

    • Lösung: Stelle sicher, dass der Code korrekt eingefügt wurde. Überprüfe die Case-Anweisungen in der Select Case Struktur.
  • Fehler: Die TextBox akzeptiert unerwartete Zeichen

    • Lösung: Vergewissere dich, dass die IsLetter und IsNumber Funktionen richtig implementiert sind und die ASCII-Werte korrekt definiert sind.

Alternative Methoden

Falls du eine einfachere Lösung suchst, kannst du auch die InputMask-Eigenschaft einer TextBox verwenden. Diese ermöglicht dir, die Eingabeformatierung direkt zu definieren, ohne VBA zu verwenden. Diese Funktion ist jedoch nur in neueren Versionen von Excel verfügbar.


Praktische Beispiele

Hier ist ein Beispiel, wie die Eingabe aussehen sollte:

  • Erlaubte Eingabe: A00-BB00-C00
  • Nicht erlaubte Eingabe: 123-ABC-XYZ

In diesem Beispiel werden nur Buchstaben und Zahlen akzeptiert, die dem definierten Muster entsprechen.


Tipps für Profis

  • Nutze die Funktion UCase$ in der IsLetter Funktion, um sicherzustellen, dass alle Buchstaben in Großbuchstaben umgewandelt werden. Das hilft dir, die Eingaben zu vereinheitlichen.

  • Wenn du die Eingabe auf genau 8 Zeichen beschränken möchtest, kannst du die TextLength-Überprüfung entsprechend anpassen.


FAQ: Häufige Fragen

1. Wie kann ich die Eingabe auf genau 8 Buchstaben beschränken? Um die Eingabe auf genau 8 Buchstaben zu beschränken, kannst du die If-Bedingung in der TextBox1_KeyPress Subroutine anpassen, um sicherzustellen, dass die Länge der Eingabe nicht mehr als 8 Zeichen beträgt.

2. Was ist der Unterschied zwischen IsLetter und IsNumber? IsLetter überprüft, ob das eingegebene Zeichen ein Buchstabe ist, während IsNumber überprüft, ob das Zeichen eine Zahl ist. Beide Funktionen stellen sicher, dass nur die gewünschten Zeichen in die TextBox eingegeben werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige