Discussion:
VBA: SetFocus-Methode
(zu alt für eine Antwort)
Oskar Vaia
2006-10-09 06:41:57 UTC
Permalink
Hallo,

ich habe ein eigenes UserForm erstellt. In einem Textfeld soll der User nur
ein Datum eingeben können. Falls er etwas anderes als ein solche eingibt,
sollte der Focus auf dem Textfeld bleiben, solange bis der User ein
richtiges Datum eingetragen hat?
Mit der IsDate-Methode kann ich zwar überprüfen, ob ein Datum in dem
Textfeld eingetragen wurde; wie kann ich es aber erreichen, dass der Focus
auf dem Textfeld bleibt? Ich habe das mit der SetFocus-Methode probiert,
dennoch bleibt der Focus aber nicht auf dem Textfeld.

Dank und Grüße

Oskar
Melanie Breden
2006-10-09 07:38:24 UTC
Permalink
Hallo Oskar,
Post by Oskar Vaia
ich habe ein eigenes UserForm erstellt. In einem Textfeld soll der User nur
ein Datum eingeben können. Falls er etwas anderes als ein solche eingibt,
sollte der Focus auf dem Textfeld bleiben, solange bis der User ein
richtiges Datum eingetragen hat?
Mit der IsDate-Methode kann ich zwar überprüfen, ob ein Datum in dem
Textfeld eingetragen wurde; wie kann ich es aber erreichen, dass der Focus
auf dem Textfeld bleibt? Ich habe das mit der SetFocus-Methode probiert,
dennoch bleibt der Focus aber nicht auf dem Textfeld.
setze den Fokus zuerst auf ein anderes Steuerelement und dann sofort wieder
auf das Textfeld.


Mit freundlichen Grüssen
Melanie Breden
--
- Microsoft MVP für Excel -
Microsoft Excel - Die ExpertenTipps http://tinyurl.com/cmned
Das Excel-VBA Codebook http://excel.codebooks.de
Excel-Auftragsprogrammierung
Oskar Vaia
2006-10-09 08:15:01 UTC
Permalink
Hallo Melanie,

danke für die Info.
Ich habe das getestet; funktioniert aber dennoch nicht. Immer wenn ich in
dem Textfeld "A" etwas anderes als ein Datum eingebe und anschliessend auf
z.B. das Textfeld "B" klicke, so gelange ich ohne Probleme in dieses
Textfeld. Das sollte aber nicht gehen, solange in dem Textfeld "A" kein
richtiges Datum darin enthalten ist.
Ich habe die Setfocus-Methode beim Textfeld "A", sei es bei dessen
"BeforeUpdate"-Ereignis, als auch bei dessen "AfterUpdate"-Ereignis
eingetragen. Aber leider keine Chance.
Was mache ich da sonst noch falsch?

Dank und Grüße

Oskar
Post by Melanie Breden
Hallo Oskar,
Post by Oskar Vaia
ich habe ein eigenes UserForm erstellt. In einem Textfeld soll der User nur
ein Datum eingeben können. Falls er etwas anderes als ein solche eingibt,
sollte der Focus auf dem Textfeld bleiben, solange bis der User ein
richtiges Datum eingetragen hat?
Mit der IsDate-Methode kann ich zwar überprüfen, ob ein Datum in dem
Textfeld eingetragen wurde; wie kann ich es aber erreichen, dass der Focus
auf dem Textfeld bleibt? Ich habe das mit der SetFocus-Methode probiert,
dennoch bleibt der Focus aber nicht auf dem Textfeld.
setze den Fokus zuerst auf ein anderes Steuerelement und dann sofort wieder
auf das Textfeld.
Mit freundlichen Grüssen
Melanie Breden
--
- Microsoft MVP für Excel -
Microsoft Excel - Die ExpertenTipps http://tinyurl.com/cmned
Das Excel-VBA Codebook http://excel.codebooks.de
Excel-Auftragsprogrammierung
Dr. Eckehard Pfeifer
2006-10-09 08:32:59 UTC
Permalink
Hallo, das Exit-Ereignis ist wohl das richtige. Wobei hier der
Cancel-Parameter im Falle von Nicht-Datum auf True gesetzt werden
sollte.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(TextBox1.Text) Then
Cancel = True
End If
End Sub

Wobei Du noch ein bisschen mit SelLength und so experimentieren kannst,
um die falsche Eingabe zu markieren

TextBox1.SelStart = 0
TextBox1.SelLength = Len(TextBox1.Text)

IsDate langt allerdings noch nicht zu, um Eingaben vom Typ 2.19 oder so
zu stoppen.
--
MfG EP
Entwicklung - Beratung - Training (www.dr-e-pfeifer.net)
XL-Funktionsverzeichnis (ISBN: 3860636898)
MS Office 2003 - Das Entwicklerbuch (ISBN 3-86063-688-X)
Oskar Vaia
2006-10-09 13:10:33 UTC
Permalink
Hallo Eckehard,

vielen Dank für Deine Rückantwort.
Das Problem mit dem Datumsfeld habe ich mit dem DateTimePicker-Steuerelement
gelöst.
Post by Dr. Eckehard Pfeifer
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(TextBox1.Text) Then
Cancel = True
End If
End Sub
Dieses Ereignis habe ich bei einem anderen Textfeld angewendet, wo nur eine
Nummer eingetragen werden darf.
Dabei habe ich halt die IsDate-Methode mit der IsNumeric-Methode ersetzt.

Dank und Grüße

Oskar

Loading...