Private Sub TextBox1_Exit(......)

20/11/2008 - 19:45 von Eberhard Funke | Report spam
Hallo,

folgendes hatte ich vor ein paar Wochen schon einmal gepostet (Ingrid):

In einer Userform soll nach Eingabe in Textbox1 eine Prüfung durchgeführt
werden. Bei fehlerhafter Eingabe soll der User eine Korrektur durchführen.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsNumeric(Me.TextBox1.Text) Then
Cancel = True
MsgBox "falsch"
Me.TextBox1.Text = ""
'Me.TextBox1.SetFocus
Else
Sheets("Tabelle1").Range("A1").Value = Me.TextBox1.Text
End If
End Sub

funktioniert nur *ohne* die MsgBox. Anderfalls blinkt in keiner Textbox der
Cursor. Daran àndert auch die - hier auskommentierte Zeile - nichts.


Wolfgang Habernoll hatte einen Workaround ("...man möge mir
verzeihen...") vorgeschlagen:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsNumeric(TextBox1.Text) Then
MsgBox ("Die Eingabe " & TextBox1.Text & " ist falsch")
UserForm1.TextBox1 = ""
SendKeys "+{Tab}"
End If
End Sub

der aber nur dann richtig funktioniert, wenn sich der User mit der Tabtaste
durch die Textboxen bewegt. Nun ist aber z. B. die Textbox2 optional, d. h.
der User kann nach Eingabe in Textbox1 mit der Maus in Textbox3 springen.
In diesem Fall landet er bei Wolfgangs Workaround in Textbox 2 anstatt
erneut in Textbox1.

Wie stellt man das an: bei falscher Eingabe --> MsgBox --> Eingabe löschen
und Focus erneut auf die Textbox?


Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
 

Lesen sie die antworten

#1 Andreas Killer
20/11/2008 - 20:38 | Warnen spam
Eberhard Funke schrieb:

In einer Userform soll nach Eingabe in Textbox1 eine Prüfung durchgeführt
werden. Bei fehlerhafter Eingabe soll der User eine Korrektur durchführen.


Frage: Was spricht dagegen die Prüfung schon wàhrend der Eingabe zu machen?

Außerdem würde ich nicht die ganze Eingabe löschen, sondern nur das was
falsch war:

Dim TextBox1LastValue As String

Private Sub TextBox1_Change()
With TextBox1
If IsNumeric(.Value) And .Value <> "" Then
TextBox1LastValue = .Value
Else
MsgBox "Nur Zahlen sind erlaubt"
.Value = TextBox1LastValue
End If
End With
End Sub

Andreas.

Ähnliche fragen