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.