Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: TextBox KeyPress

TextBox KeyPress
05.06.2007 22:27:00
Roger
Hallo Zusammen,
habe soeben heraus gefunden das Case 48 to 57 in dem untenstehenden Makro für die Ziffern 0 - 9 stehen.
Wie kann ich aber machen das der Eingabebereich zwischen 1 und 2000 liegt und sonst eine MsgBox kommt " Leider ist Ihre Zahl zu gross".
Ebenfalls darf keine 0 eingegeben werden. Wenn ich aber Case 49 bis 57 mache, würde dass ja bedeuten das ich auch die Zahl 50 nicht schreiben könnte, oder ?

Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 48 To 57
Case Else
KeyAscii = 0
End Select
End Sub


Wäre wieder einmal sehr dankbar wenn mir jemand helfen könnte.
Gruss Roger

Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: TextBox KeyPress
05.06.2007 22:38:00
Uduuh
Hallo,
das ist das falsche Ereignis.
In einer Tabelle würde ich Change nehmen, in einer Userform Exit.
Gruß aus’m Pott
Udo

AW: TextBox KeyPress
05.06.2007 22:47:52
Roger
Hallo Uduuh,
da meine VBA Kenntnisse bescheiden sind weiss ich leider nicht was Du meinst.
Das Case 48 to 57 ist alles was ich nachvollziehen kann. Die Ergänzung von max. 2000 und keine 0 kann ich nicht einfügen, weil mir der Ansatz fehlt.
Wie macht man so etwas?
Würde mich über eine Idee freuen.
Gruss Roger

Anzeige
AW: TextBox KeyPress
05.06.2007 22:47:00
Roger
Hallo Uduuh,
da meine VBA Kenntnisse bescheiden sind weiss ich leider nicht was Du meinst.
Das Case 48 to 57 ist alles was ich nachvollziehen kann. Die Ergänzung von max. 2000 und keine 0 kann ich nicht einfügen, weil mir der Ansatz fehlt.
Wie macht man so etwas?
Würde mich über eine Idee freuen.
Gruss Roger

Anzeige
AW: TextBox KeyPress
05.06.2007 23:04:00
Uduuh
Hallo,
Keypress wertet den ASCII-Wert jedes einzelnenTastendrucks aus. Wenn du die komplette Eingabe vergleichen willst, musst du auch den kompletten Inhalt der TBox vergleichen.

Private Sub TextBox1_Change()
Select Case TextBox1 * 1
Case 1 To 2000  'nix passiert
Case Else
MsgBox "Wert zu groß"
End Select
End Sub


Gruß aus’m Pott
Udo

Anzeige
AW: TextBox KeyPress
05.06.2007 23:34:29
Roger
Hallo Udo,
Nun bin ich aber weiter von der Lösung entfernt als zuvor. Wenn ich jetzt ein Buchstabe eingebe wird das Makro durch eine Fehlermeldung gleich beendet. Gebe ich eine zu grosse Zahl ein kommt zwar die Meldung "Wert zu gross." aber korrigieren kann ich die Eingabe nicht.
Ist das was ich mir wünsche überhaupt möglich?

Anzeige
AW: TextBox KeyPress
06.06.2007 08:14:00
Luschi
Hallo Roger,
habe mir Deine Beiträge und die Lösungsansätze durchgelesen; aber so richtig schlau bin ich dabei nicht geworden.
Mit der "TextBox3_KeyPress"-Methode kann man verhindern/zulassen, ob bestimmte Zeichen (Buchstaben, Zifern, Sonderzeichen) in die Textbox3 eingegeben werden dürfen.
Dabei wird der Tastendruck gemäß der ASCII-Zeichensatz-Tabelle ausgewertet. Darin sind 256 Zeichen aufgelistet, die einem standartisierten Code zugeordnet werden.
Drückt der User die Taste "A", dann kommt bei der oben beschriebenen Methode der Tastencode "65" an.
Für 0 bis 9 entsprechen der Code 40 bis 57. In Deinem 1. Beispiel sind also nur die Zahlen 0 bis 9 erlaubt, alle anderen Tastatureingaben werden unterdrückt.
Möchtestest Du die Werteingabe beschränken auf 1 bis 2000, dann mache es so:

Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
'nur Zahlen 0 bis 9
Case 48 To 57
Case Else
'alle anderen Tastatureingaben unterdrücken
'außer folgende Tasten: ESC, Enter, Pfeile, Entf, Backspace
KeyAscii = 0
End Select
If CInt(Me.TextBox1.Text & Chr(KeyAscii)) > 2000 Then
MsgBox "Wert ist größer 2000!", 16, "Hinweis"
KeyAscii = 0
End If
End Sub

Gruß von Luschi
aus klein-Paris

Anzeige
Delux Variante
06.06.2007 14:50:00
Roger
Hallo Luschi,
Herzlichen Dank für die Lösung, Du hast den Nagel auf den Kopf getroffen. Genau das habe ich gesucht.
Jedoch habe ich noch eine Fragen dazu: (aber natürlich nur wenn ich darf :O)
- Wenn die Eingabe grösser ist als 2000 kommt die Msgbox. Das ist auch richtig so. Drücke ich dann ok steht immer noch die zuvor eingegebene Zahl dort. Kann man auch machen das diese bei der Rückkehr von der Msgbox gleich gelöscht wird? Sonst muss ich ja die Löschtaste noch frei geben ;O)
Wenn das noch möglich wäre, hätte ich eine Delux Variante.
GRuss Roger

Anzeige
Delux Variante
06.06.2007 14:57:00
Roger
Hallo Luschi,
Herzlichen Dank für die Lösung, Du hast den Nagel auf den Kopf getroffen. Genau das habe ich gesucht.
Jedoch habe ich noch eine Fragen dazu: (aber natürlich nur wenn ich darf :O)
- Wenn die Eingabe grösser ist als 2000 kommt die Msgbox. Das ist auch richtig so. Drücke ich dann ok steht immer noch die zuvor eingegebene Zahl dort. Kann man auch machen das diese bei der Rückkehr von der Msgbox gleich gelöscht wird? Sonst muss ich ja die Löschtaste noch frei geben ;O)
Wenn das noch möglich wäre, hätte ich eine Delux Variante.
GRuss Roger

Anzeige
AW: Delux Variante
06.06.2007 17:01:00
Bertram
Hallo Roger,
falls ich's richtig verstanden habe, mußt du nur noch die Zeile TextBox3.Text="" einfügen.

Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
'nur Zahlen 0 bis 9
Case 48 To 57
Case Else
'alle anderen Tastatureingaben unterdrücken
'außer folgende Tasten: ESC, Enter, Pfeile, Entf, Backspace
KeyAscii = 0
End Select
If CInt(Me.TextBox3.Text & Chr(KeyAscii)) > 2000 Then
MsgBox "Wert ist größer 2000!", 16, "Hinweis"
KeyAscii = 0
TextBox3.Text = ""
End If
End Sub


Gruß
Bertram

Anzeige
Laufzeitfehler 13
06.06.2007 18:59:00
Roger
Perfekt Bertram,
aber etwas ist noch zu erwähnen.
Gebe ich in der Textbox ein Buchstabe ein was ja nicht geht, bricht das Makro mit dem Laufzeitfehler 13 ab.
Kann ich diesen Fehler abfangen?
Msgbox zum Beispiel?
Gruss Roger

AW: Laufzeitfehler 13
06.06.2007 22:07:30
Bertram
Hallo Roger,
der Einfachheit halber würde ich das so machen:

Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
'nur Zahlen 0 bis 9
Case 48 To 57
Case Else
'alle anderen Tastatureingaben unterdrücken
'außer folgende Tasten: ESC, Enter, Pfeile, Entf, Backspace
KeyAscii = 0
TextBox3.Text = ""
Exit Sub
End Select
If CInt(Me.TextBox3.Text & Chr(KeyAscii)) > 2000 Then
MsgBox "Wert ist größer 2000!", 16, "Hinweis"
KeyAscii = 0
TextBox3.Text = ""
End If
End Sub


Du kannst ja vor oder nach dem Leeren der Textbox noch ne MsgBox bringen wenn du magst.
Gruß
Bertram

Anzeige
Herzlichen Dank!!
06.06.2007 22:49:17
Roger
Hallo Bertram,
nun funktioniert es Perfekt.
Herzlichen Dank für Deine Hilfe.
Gruss Roger

Gerne oT
06.06.2007 22:52:00
Bertram
;
Anzeige
Anzeige

Infobox / Tutorial

TextBox KeyPress in Excel VBA


Schritt-für-Schritt-Anleitung

Um die Eingabe in einer TextBox auf bestimmte Zahlen zu beschränken, kannst du das KeyPress-Ereignis in Excel VBA verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne deine Excel-Datei und gehe in den VBA-Editor (Alt + F11).
  2. Füge eine Userform hinzu, falls noch nicht geschehen.
  3. Füge eine TextBox (z.B. TextBox3) zur Userform hinzu.
  4. Doppelklicke auf die TextBox, um den Code-Editor zu öffnen.
  5. Füge folgenden Code ein:
Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
        Case 48 To 57 ' Ziffern 0 bis 9
        Case Else
            KeyAscii = 0 ' Alle anderen Zeichen unterdrücken
    End Select

    If CInt(Me.TextBox3.Text & Chr(KeyAscii)) > 2000 Then
        MsgBox "Wert ist größer 2000!", 16, "Hinweis"
        KeyAscii = 0
        TextBox3.Text = "" ' TextBox leeren
    End If
End Sub
  1. Schließe den VBA-Editor und teste die Userform.

Häufige Fehler und Lösungen

  • Laufzeitfehler 13: Dieser Fehler tritt auf, wenn ein Buchstabe oder ein ungültiges Zeichen eingegeben wird. Um diesen Fehler abzufangen, kannst du den Code anpassen, um die TextBox zu leeren und eine Fehlermeldung anzuzeigen. Beispiel:
Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
        Case 48 To 57 ' Ziffern 0 bis 9
        Case Else
            KeyAscii = 0 ' Alle anderen Zeichen unterdrücken
            TextBox3.Text = "" ' TextBox leeren
            MsgBox "Bitte nur Ziffern eingeben!"
    End Select
    ' ... (Rest des Codes)
End Sub
  • Eingabe von 0: Um die Eingabe von 0 zu verhindern, füge eine Überprüfung hinzu, dass der eingegebene Wert größer als 0 sein muss.

Alternative Methoden

Eine alternative Methode zur Eingabekontrolle ist die Verwendung des Change-Ereignisses. Diese Methode überprüft den gesamten Inhalt der TextBox nach jeder Änderung:

Private Sub TextBox3_Change()
    If Val(TextBox3.Text) > 2000 Then
        MsgBox "Wert ist größer 2000!", 16, "Hinweis"
        TextBox3.Text = ""
    End If
End Sub

Praktische Beispiele

Hier ist ein Beispiel, das sowohl die KeyPress- als auch die Change-Ereignisse verwendet, um eine vollständige Eingabekontrolle zu gewährleisten:

Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
        Case 48 To 57 ' Ziffern 0 bis 9
        Case Else
            KeyAscii = 0 ' Alle anderen Zeichen unterdrücken
    End Select
End Sub

Private Sub TextBox3_Change()
    If Val(TextBox3.Text) > 2000 Then
        MsgBox "Wert ist größer 2000!", 16, "Hinweis"
        TextBox3.Text = ""
    End If
End Sub

Tipps für Profis

  • Verwende die ASCII-Werte für die Tasteneingaben, um eine präzisere Kontrolle über die Eingaben zu haben. Beispielsweise kannst du auch Pfeiltasten und Enter-Taste zulassen, indem du die entsprechenden ASCII-Werte in die Select Case-Anweisung aufnimmst.
  • Denke daran, dass das KeyPress-Ereignis vor der Änderung des TextBox-Inhalts ausgelöst wird. Daher ist es wichtig, die Logik zur Validierung der Eingabe richtig einzusetzen.

FAQ: Häufige Fragen

1. Frage
Wie kann ich die Eingabe auf positive ganze Zahlen beschränken?
Antwort: Du kannst im KeyPress-Ereignis die Eingabe mit If Val(TextBox3.Text) <= 0 Then überprüfen und entsprechend handeln.

2. Frage
Kann ich auch Sonderzeichen in der TextBox zulassen?
Antwort: Ja, du kannst den Case Else-Block anpassen, um bestimmte ASCII-Werte für Sonderzeichen zuzulassen, indem du sie explizit hinzufügst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige