SetFocus schlägt fehl

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

Betrifft: SetFocus schlägt fehl
von: PQuest:-)
Geschrieben am: 29.10.2015 10:51:12

Hallo,
ich nutze in eiunem userform eine Combobox. Trage ich dort einen Wert ein, wird überprüft, ob er existiert. Wenn ja, dannn erscheint eine Meldung.
Wird diese mit Ja beantwortet, soll das Formular mit den entsprechenden Daten aus einer Tabelle befüllt werden.
Bei Nein soll die Combobox geleert werden UND den Focus erhalten. Hier genau liegt das Problem. Der Focus landet immer auf dem nächsten Feld in der Reihenfolge.
Eine weitere Kuriosität ist die, dass, seit ich diese Sub eingefügt habe, Excel ab und zu abstürzt.

Private Sub cbPatID_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Checking for duplicates
Dim rngPatID
Dim ws As Worksheet
Dim LoPCol As Long, LoPRow As Long, LoPLastRow As Long
Set ws = Worksheets("ListOfPatients")
With ws
    LoPCol = 1
    LoPRow = 8
    LoPLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set rngPatID = .Range(.Cells(LoPRow, LoPCol), .Cells(LoPLastRow, LoPCol)).Find(cbPatID.Text) _
        If Not rngPatID Is Nothing Then
            If MsgBox("This Patient ID already exist! Do you want to edit this patients data?",  _
vbYesNo) = vbYes Then
                'Formular mit Werten öffnen
            Else
                Me.Controls("cbPatID").Text = vbNullString
                Me.Controls("cbPatID").SetFocus
            End If
        End If
    End With
End Sub

Mit Bitte um Unterstützung,
PQuest:-)

Bild

Betrifft: AW: SetFocus schlägt fehl
von: Daniel
Geschrieben am: 29.10.2015 11:07:35
Hi
solange das Makro cbPatID_Exit läuft, hat das Steuerelement cbPatID noch den Focus.
der Focus wechselt erst nach dem Exit-Eventmakro.
wenn du erreichen willst, dass der Focus auf diesem Steuerelement bleibt, dann stetze einfach die Variable Cancel = True
in allen Eventmakros, vor dem auslösenden Event ausgeführt werden, gibt es diese Cancel-Variable.
Wird diese auf TRUE gesetzt, wird das auslösende Event dann doch nicht ausgeführt.
und noch ne Frage so nebenbei:
warum Me.Controls("cbPatID").Text = vbNullString
wenn das Objekt das du bearbeiten willst, fix ist, dann kannst du es auch direkt ansprechen:
cbPatID.Text = vbNullString
dann kannst du auch die IntelliSense zum Eingeben des Objektnames nutzen und vermeidest so tipfehler.
Gruß Daniel

Bild

Betrifft: AW: SetFocus schlägt fehl
von: PQuest:-)
Geschrieben am: 29.10.2015 13:40:42
Hmmm...irgendwas muss ich wohl grundsätzlich etwas falsch machen. Der Focus landet im Nirvana, soll heissen kein Object auf dem Userform wird angewählt.
Zusätzlich taucht die MsgBox nun auf, nachdem ich einen neuen Datensatz eingegeben habe.
Ich scheine echt zu blöd zu sein.
Das sind meine Änderungen:

Private Sub cbPatID_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Checking for duplicates
Dim rngPatID
Dim ws As Worksheet
Dim LoPCol As Long, LoPRow As Long, LoPLastRow As Long
'Application.EnableEvents = False
Set ws = Worksheets("ListOfPatients")
With ws
    LoPCol = 1
    LoPRow = 8
    LoPLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set rngPatID = .Range(.Cells(LoPRow, LoPCol), .Cells(LoPLastRow, LoPCol)).Find(cbPatID.Text) _
        If Not rngPatID Is Nothing Then
            If MsgBox("This Patient ID already exist! Do you want to edit this patients data?",  _
vbYesNo) = vbYes Then
'                If cbpatid.ListIndex >= 0 Then
'               Row = cbpatid.ListIndex + 2 'Formular mit Werten öffnen
                Cancel = True
            Else
                Me.Controls("cbPatID").Text = vbNullString
                cbPatID.SetFocus
            End If
        End If
    End With
'Application.EnableEvents = True
End Sub
Ich habe den Eindruck, dass der Cancel=true nicht greift. Stattdessen wird wohl das Userform in der Vordergrund geholt und die Msgbox bleibt im Hintergrund geöffnet. Aber auch hilfloses ausprobieren mit dem Cancel True an anderen Stellen und Application.Enable helfen nichts. Muss wohl daran liegen, dass ich es noch nicht verstanden habe.

Bild

Betrifft: AW: SetFocus schlägt fehl
von: Rudi Maintaire
Geschrieben am: 29.10.2015 14:05:43
Hallo,

        If Not rngPatID Is Nothing Then
            If MsgBox("This Patient ID already exist! Do you want to edit this patients data?",  _
 _
vbYesNo) = vbYes Then
'                If cbpatid.ListIndex >= 0 Then
'               Row = cbpatid.ListIndex + 2 'Formular mit Werten öffnen
             Else
                Cancel = True
                cbPatID = ""
            End If
        End If
Gruß
Rudi

Bild

Betrifft: AW: SetFocus schlägt fehl
von: PQuest:-)
Geschrieben am: 29.10.2015 14:25:33
Keinerlei Änderung im Verhalten :-(

Bild

Betrifft: AW: SetFocus schlägt fehl
von: Rudi Maintaire
Geschrieben am: 29.10.2015 15:05:29
Hallo,
in meiner Datei klappt es.
Aber Nachbauten weichen i.d.R. erheblich vom Original ab. Außerdem mache ich vermutlich alles richtig. Und wenn man alles richtig macht dann klappt es auch. ;-)
Gruß
Rudi

Bild

Betrifft: AW: SetFocus schlägt fehl
von: PQuest:-)
Geschrieben am: 29.10.2015 15:25:55
Mir schwant da gerade was...
Nepumuk war so nett und hat mir für meine Textboxen eine Klasse erstellt. Wird das der Grund für alles Übel sein?

Bild

Betrifft: AW: SetFocus schlägt fehl
von: PQuest:-)
Geschrieben am: 29.10.2015 15:40:37
Hier mal die Datei...aber nicht erschrecken und nicht schimpfen :-)
https://www.herber.de/bbs/user/101123.xlsm

Bild

Betrifft: AW: SetFocus schlägt fehl
von: Rudi Maintaire
Geschrieben am: 29.10.2015 16:11:35
Hallo,
diesen Programmteil betreffend funktioniert's doch:

    If Not rngPatID Is Nothing Then
        If MsgBox("This Patient ID already exist! Do you want to edit this patients data?",  _
vbYesNo) = vbYes Then
'                If cbpatid.ListIndex >= 0 Then
'               Row = cbpatid.ListIndex + 2 'Formular mit Werten öffnen
        Else
            Cancel = True
            cbPatID = ""
        End If
    End If

Patient vorhanden-> Abrage 'bearbeiten?'
ja: nix passiert, da nicht programmiert.
nein: Combobox leere und Abbruch; Focus bleibt auf Combobox.
Was ist dein Problem?
Gruß
Rudi

Bild

Betrifft: AW: SetFocus schlägt fehl
von: PQuest:-)
Geschrieben am: 29.10.2015 16:33:20
Ok...habe ich mich da wohl falsch ausgedrückt? Ich möchte den Cursor in der Combobox haben um direkt einen neuen Wert eintippen zu können.

Bild

Betrifft: AW: SetFocus schlägt fehl
von: Rudi Maintaire
Geschrieben am: 29.10.2015 17:03:40
Hallo,
setz die ShowModal-Eigenschaft der UF auf True.
Gruß
Rudi

Bild

Betrifft: AW: SetFocus schlägt fehl
von: PQuest:-)
Geschrieben am: 29.10.2015 17:31:55
Nicht wirklich jetzt...Also wenn es etwas gbt, was ich jetzt sicher nicht mehr vergesse, so ist das diese Eigenschaft.
Danke!

Bild

Betrifft: AW: SetFocus schlägt fehl
von: Rudi Maintaire
Geschrieben am: 29.10.2015 17:19:33
Hallo,
ganz unelegant:

            Cancel = True
            cbPatID = ""
            Application.SendKeys "{tab}+{tab}"
Gruß
Rudi

Bild

Betrifft: AW: SetFocus schlägt fehl
von: PQuest:-)
Geschrieben am: 29.10.2015 17:40:07
Hast du dir meinen Code angesehen...sieht der aus, als würde ich nach Eleganz streben? So weit bin ich noch nicht. Im Moment ist das Ergebnis und nicht der Weg das Ziel ;-)
Danke.

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Prüfen, ob irgendeine Checkbox ausgewählt ist"