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

Forumthread: VBA Textbox - Texteingabe wird nicht angzeigt

VBA Textbox - Texteingabe wird nicht angzeigt
19.08.2016 15:18:56
MFuchs
Hallo zusammen.
Nachdem ich die letzten zwei Tage durch div. Beiträge hier und mit Googles Hilfe versucht habe eine Lösung für mein Problem zu finden, aber bisher zu keinem Ergebnis gekommen bin, bitte ich jetzt doch die Experten um Rat.
Beschreibung des Situation:
Ich habe ein Userform, das innerhalb eines Frames mehrere Textboxen besitzt.
In diese Textboxen soll der Anwender eine Zahl angeben.
Die Eingabe der Zeichen überwache ich in einer Sub innerhalb des Codebereichs des Userforms:

Private Sub tbEmployeeActive_KeyPress(ByVal tbInput As MSForms.ReturnInteger)
Call checkInput(tbInput, tbEmployeeActive)
Debug.Print (tbInput)
End Sub

Um den Code übersichtlich zu halten, habe ich die Funktion zur
Fehlerprüfung in den Codebereich eines Moduls ausgelagert:

Public Sub checkInput(ByVal KeyAScii As MSForms.ReturnInteger, ByRef tbObj As MSForms.TextBox)
Select Case KeyAScii
Case 48 To 57
Case Else:
KeyAScii = 0
MsgBox "Bitte eine Zahl zwischen 0 und 99999 eingeben.", vbOKOnly, "Eingabefehler"
tbObj.SetFocus
tbObj.SelStart = Len(tbObj.Text)
Debug.Print (tbObj.Name)
Debug.Print (tbObj.Text)
End Select
Debug.Print ("Debug1")
End Sub

Hier werden die eingebenen Zeichen ausgewertet und bei Eingabe eines Zeichens != 0-9 eine MsgBox mit einem Hinweis auf die korrekte Eingabe geöffnet. Wenn der Anwender die MsgBox per "OK" schließt, soll er in der Textbox die Eingabe erneut tätigen.
Der Aufruf der Funktionen funktioniert, wie ich anhand der Debug.Prints nachvollziehen konnte. Beim Verlassen der MsgBox befindet sich der Fokus auch wieder korrekt in der aufrufenden Textbox.
Hier beginnt mein Problem:
Wie ich anhand meines "Debug.Print(tbInput)" in der aufrufenden Sub feststellen konnte wird die Eigabe von Zeichen = 0-9 verarbeitet. Der voherige Text kann auch korrekt per Backspace gelöscht werden. Wird ein nicht zugelassenes Zeichen eingegeben, wird auch wieder korrekt die Fehlerroutine aufgerufen. Per Shift+/Tab gelangt man auch korrekter Weise in die vorherige/nächste Textbox. Alles weist also darauf hin, dass der Carrier sich an der korrekten Stelle befindet, jedoch erscheinen die eingegebenen Zeichen 0-9 nicht im Textfeld der Textbox.
Erst wenn per Maus die Textbox wieder angeklickt wird, taucht der IBeam Cursor auf und die Eingabe wird korrekt angezeigt.
Für Hinweise wäre ich sehr dankbar.
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Textbox - Texteingabe wird nicht angzeigt
20.08.2016 02:52:08
fcs
hallo MFuchs,
ich habe den beschriebenen Effekt unter Excel 2010 nicht beobachtet.
Allerdings reicht folgendes zur Überwachung der Tasten-Eingabe in Textboxen:
'Ereignismakro für Textbox im Userform
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = fncCheckInputZahl(KeyAscii)
End Sub

'Function in einem allgemeinen Modul
Public Function fncCheckInputZahl(varAscii)
'nur Zahleneingabe zulassen
Select Case varAscii
Case 48 To 57
fncCheckInputZahl = varAscii
Case Else:
fncCheckInputZahl = 0
MsgBox "Bitte eine Zahl zwischen 0 und 99999 eingeben.", vbOKOnly, "Eingabefehler"
End Select
End Function
Gruß
Franz
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Texteingabe in VBA Textboxen korrekt anzeigen


Schritt-für-Schritt-Anleitung

  1. Erstelle ein UserForm: Öffne Excel und gehe zu den Entwicklertools. Erstelle ein neues UserForm, indem du auf "Einfügen" klickst und dann "UserForm" auswählst.

  2. Füge Textboxen hinzu: Ziehe die Textbox-Steuerelemente auf das UserForm. Du kannst mehrere Textboxen (z.B. tbEmployeeActive) hinzufügen, um die Eingaben zu erfassen.

  3. Schreibe den VBA-Code: Füge den folgenden Code in den Codebereich des UserForms ein, um die Eingabe zu überwachen:

    Private Sub tbEmployeeActive_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
       Call checkInput(KeyAscii, tbEmployeeActive)
    End Sub
  4. Erstelle die Fehlerprüfungsfunktion: Erstelle eine allgemeine Funktion zur Eingabekontrolle in einem Modul:

    Public Sub checkInput(ByVal KeyAScii As MSForms.ReturnInteger, ByRef tbObj As MSForms.TextBox)
       Select Case KeyAScii
           Case 48 To 57 ' Zahlen von 0 bis 9
           Case Else
               KeyAScii = 0
               MsgBox "Bitte eine Zahl zwischen 0 und 99999 eingeben.", vbOKOnly, "Eingabefehler"
               tbObj.SetFocus
               tbObj.SelStart = Len(tbObj.Text)
       End Select
    End Sub
  5. Teste das UserForm: Starte das UserForm und überprüfe, ob die Texteingabe in der Textbox korrekt funktioniert.


Häufige Fehler und Lösungen

  • Eingabe wird nicht angezeigt: Wenn die Eingabe der Zahlen nicht in der Textbox angezeigt wird, überprüfe, ob der Fokus korrekt gesetzt ist. Vergewissere dich, dass der Code in der KeyPress-Ereignisprozedur korrekt geschrieben ist.

  • MsgBox unterbricht den Fluss: Wenn die MsgBox erscheint, kann es die Eingabe unterbrechen. Stelle sicher, dass der Fokus nach dem Schließen der MsgBox wieder auf die Textbox gesetzt wird.


Alternative Methoden

Eine alternative Methode zur Überwachung der Eingaben in der Textbox könnte die Verwendung von KeyDown oder Change-Ereignissen sein. Hier ein Beispiel mit KeyDown:

Private Sub tbEmployeeActive_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
   If Not (KeyCode >= 48 And KeyCode <= 57) Then
       MsgBox "Bitte eine Zahl zwischen 0 und 99999 eingeben.", vbOKOnly, "Eingabefehler"
       KeyCode = 0
   End If
End Sub

Praktische Beispiele

  1. Zahleneingabe in einer Textbox: Du kannst eine Textbox für die Eingabe von Mitarbeiterzahlen verwenden, indem du die beschriebenen Methoden anwendest, um sicherzustellen, dass nur Zahlen eingegeben werden.

  2. Benutzerdefinierte Eingaben: Passe die checkInput-Funktion an, um spezifische Eingaben zu erlauben, z.B. Dezimalzahlen oder negative Zahlen.


Tipps für Profis

  • Verwende InputMask: Um die Eingabe weiter zu kontrollieren, kannst du die InputMask für deine Textbox verwenden, um das Format der Eingaben vorzugeben.

  • Erstelle eine Validierungsroutine: Eine zusätzliche Validierungsroutine kann helfen, die Eingaben auf korrekte Werte zu überprüfen, bevor sie verarbeitet werden.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Textboxen gleichzeitig überwachen?
Du kannst eine allgemeine Funktion erstellen, die von allen Textboxen aufgerufen wird, und die spezifische Logik in der Funktion anpassen.

2. Funktioniert das auch in Excel 365?
Ja, die beschriebenen Methoden funktionieren in Excel 2010 und in neueren Versionen wie Excel 365. Achte darauf, dass du die entsprechenden Einstellungen für die Entwicklertools aktivierst.

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