setfocus setzt den Fokus nicht

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
UserForm TextBox MsgBox
Bild

Betrifft: setfocus setzt den Fokus nicht
von: P-Quest :-)
Geschrieben am: 21.07.2015 10:06:56

Hallo,
ich führe in der Textbox txtMenge einer Userform eine Prüfung durch. Sollte die Prüfung negativ sein, so erscheint eine Fehlermeldung.
Das klappt, dank der zahlreichen Hilfen hier im Forum, auch problemlos. Es gibt nur einen kleinen Schönheitsfehler.
Nachdem ich die Fehlermeldung bestätigt habe, soll der focus auf das Feld txtMenge gesetzt werden. Leider springt der Cursor aber immer in das nächste Feld.

Private Sub txtMenge_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If blnSchliessen = False Then
    txtMenge = Trim(txtMenge.Value)
    If Val(txtMenge.Value) = 0 Or txtMenge.Value = "" Then
        If Not UFCloseMode Then
            MsgBox "Bitte geben Sie für die Menge einen Wert größer 0 ein!", vbCritical, " _
Falsche Eingabe"
            txtMenge.SetFocus
        End If
    Else
        If Not cbID = "" Then
            Call WertBer
        Else
            txtWert.Value = 0
        End If
    End If
End If
End Sub
Gibt es hier noch eine Eigenschaft, die ich ändern muss?
Bei diesem Beispiel funktioniert es einwandfrei.
Private Sub Checkdata(fault)
Dim ws As Worksheet
Dim i As Byte
Dim lngLastRow As Long
fault = 0
Set ws = Worksheets("EinAus")
lngLastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
    If cbID = "" Then
        MsgBox "Sie müssen eine ID auswählen.", 16
        fault = 1
        cbID.SetFocus
    ElseIf txtDatum = "" Then
        MsgBox "Sie müssen ein Datum eingeben.", 16
        fault = 1
        txtDatum.SetFocus
    ElseIf Val(txtMenge.Value) = 0 Or txtMenge.Value = "" Then
        MsgBox "Bitte geben Sie für die Menge einen Wert größer 0 ein!", vbCritical, "Falsche  _
Eingabe"
        fault = 1
        txtMenge.SetFocus
    End If
End Sub
Gruß,
Peter

Bild

Betrifft: AW: setfocus setzt den Fokus nicht
von: Rudi Maintaire
Geschrieben am: 21.07.2015 10:25:03
Hallo,

....
Cancel = True
txtMenge.SetFocus
....

Gruß
Rudi

Bild

Betrifft: AW: setfocus setzt den Fokus nicht
von: P-Quest :-)
Geschrieben am: 21.07.2015 11:03:29
Kurz und knackig. Danke :-)

Bild

Betrifft: AW: setfocus setzt den Fokus nicht
von: Daniel
Geschrieben am: 21.07.2015 10:32:50
Hi
du hast das EXIT-Event ausgewählt.
das Exit-Event wird ausgeführt, bevor Excel vom alten auf das neue Steuerelement wechselt, dh das alte Steuerelement hat noch den Focus wenn diesese Event läuft, deswegen ist die Anweisung txtMenge.SetFocus zu diesem Zeitpunkt sinnlos.
die richtige Anweisung an dieser Stelle wäre: Cancel = True
In einem Event-Makro ist Cancel die Eigenschaft, welche Festlegt, ob das auslösende Event (hier das Exit, welches du ja vermeiden willst) nach dem Makro normal ausgeführt wird oder nicht.
Setzt du die Variable auf True, wird das Event dann nicht mehr ausgeführt und der Focus bleibt auf dem alten Steuerelement.
Das zweite Makro ist kein Event-Makro, sondern ein normales Makro, daher ist hier deine Vorgehensweise passend.
Gruß Daniel

Bild

Betrifft: AW: setfocus setzt den Fokus nicht
von: P-Quest :-)
Geschrieben am: 21.07.2015 11:02:26
Wow, besten Dank für die ausführliche Antwort!
Ach ja...es klappt...natürlich!

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Arbeitsblätter zusammenkopieren"