cbo1.SetFocus funktioniert nicht

Eine Dialogbox hat 6 cboboxen (cbo1 bis cbo6) mit den Tab-Indices 0 bis 5. Nach der Eingabe in cbo4 soll die Anweisung aus dieser cbo abgearbeitet werden und cbo1 erneut den Focus erhalten. Mit

Sub cbo4()_Exit pp
Anweisungen ausführen
Set Focus.cbo1
End Sub

läuft´s nicht, cbo5 als nächster Tab-Index-Inhaber erhält den Focus. Was ist zu tun?
Gruß Wilhelm

Sub cbo4()_Exit pp
Anweisungen ausführen
Set Focus.cbo1
End Sub

Also, die Syntax ist steuerelement.setfocus und nicht andersrum. Ich nehme mal an, das ist ein Dreckfuhler.

Ansonsten bau mal vor der Anweisung eine msgbox ein, die die Enabled-Eigenschaft ausgibt. Enabled muß auf True stehen.

Hallo,

versuchs doch mal mit einem Controlarray.
eine combobox anlegen und dann davon kopien machen.
jedem Event dieser comboboxen wird jetzt ein Index übergeben.
mit lostfocus kannst du dann bstimmen welche Combobox als nächstes den Focus bekommen soll

mfg CB

Hallo Heinerich u. Christian,
Ihr habt beide leider Lösungs-Perlen vor die Sau geworfen:

H: Von einer msgbox, die eine Enabled-Eigenschaft ausgibt (für die cbo1?) habe ich noch nie und nie nichts gehört; msgbox klingt für mich auch nicht sehr automatisch?! Könntest Du bitte versuchen, mir Deine Lösung ein wenig näher zu erklären?

C: Controlarray u. Kopien von cboboxen sind für mich ebenfalls bis zu diesem Augenblick böhmischen Dörfer.

Bitte an Euch beiden und die Anderen im Brett: Bitte einen neuen bzw. für mich umsetzbaren Rettungsanker werfen.

Danke u. Gruß Wilhelm

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Sub cbo4()_Exit pp
Anweisungen ausführen
Set Focus.cbo1
End Sub

Exit-Ereignis? ist das ev. VBA (Access od. Word oder so?)
Dann müßte der Code im LostFocus-Ereignis plaziert werden.
LieGrü

Hallo Wilhelm

Zunächst: Hast du bereits die Anweisung in „cbo1.SetFocus“ ausgebessert?

Funktioniert es jetzt? Wenn nicht: Welche Fehler-Meldung erscheint, bzw. was passiert?

Da du ein Exit-Ereignis benutzt: Programmierst du in VBA? (also z.B. Access oder Excel oder Word)

Wenn du das getestet hast melde dich wieder.

Übrigens es gibt mehrere Möglichkeiten, warum es nicht funktioniert. Z.B. Enabled-Eigenschaft von cbo1 ist False. Es könnte auch noch folgendes sein: Im Ereignis Exit darf der Fokus nicht verschoben werden, dann solltest du zu diesem Zweck das LostFocus-Ereignis verwenden.

Aber jetzt sag erstmal, was der Test ergeben hat!

CU
Markus

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Markus,

Meine Programme im selbst beigebrachten VBA entstehen für WORD. Alle cbocbo Enabled=true.TabIndices von 0 bis 6 fortlaufend.

Mit dem bereits genannten Code
Sub cbo4()_Exit pp

Anweisungen ausführen
cbo1.SetFocus
End Sub

steigt das Programm nicht aus, sondern wird - offenbar durch das Exit-Ereignis - veranlaßt, die cbo6 anzuspringen. Gern würde ich Deine Anregung aufgreifen und mit einem cbo4()LostFocus-Ereignis arbeiten; im Drop-down-Feld zur Prozedur gibt es alle möglichen Ereignisse von AfterUpdate bis MouseDown, leider kein LostFocus- und ein selbst gezimmertes Sub cbo()_LostFocus funktioniert nicht. Was ist zu tun? Danke und Gruß
Wilhelm

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Wilhelm

Meine Programme im selbst beigebrachten VBA entstehen für
WORD. Alle cbocbo Enabled=true.TabIndices von 0 bis 6
fortlaufend.

Aha! Da habe ich doch mal gleich in der VBA-Hilfe für Word nachgesehen. Ich bin mir da zwar nicht ganz sicher (hatte selber keine Zeit es zu testen), aber nachdem, was ich da gelesen habe (Cancel: Erforderlich. Ereignisstatus. False zeigt an, dass das Steuerelement das Ereignis verarbeiten soll (Voreinstellung). True zeigt an, dass die Anwendung das Ereignis verarbeitet und der Fokus auf dem aktuellen Steuerelement verbleibt.), könnte folgende Änderung helfen:

Mit dem bereits genannten Code
Sub cbo4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Anweisungen ausführen
cbo1.SetFocus
Cancel=True 'Anwendung übernimmt die Verarbeitung
End Sub

steigt das Programm nicht aus, sondern wird - offenbar durch
das Exit-Ereignis - veranlaßt, die cbo6 anzuspringen.

Genau das vermute ich auch und zwar, wenn die Verarbeitung des Ereignisses dem Steuerelement überlassen wird (Cancel=false). Ich denke es passierte in deiner alten Variante folgendes.
Der Benutzer möchte das Steuerelement verlassen. Bevor die Aktion ausgeführt wird, fragt das Steuerlelement den Programmierer um Erlaubnis (Exit-Ereignis). Du setzt den Fokus auf das cbo1 und verlässt das Ereignis, wobei du die Verarbeitung dem Steuerelement überlässt (Cancel=False, default-Wert), was dieses dann auch anstandslos macht: Es verschiebt den Fokus auf cbo6.

Probier die ganze Sache mal aus und sag mir bescheid, ob es geklappt hat.

Gern würde ich Deine Anregung aufgreifen und mit einem
cbo4()LostFocus-Ereignis arbeiten; im Drop-down-Feld zur
Prozedur gibt es alle möglichen Ereignisse von AfterUpdate bis
MouseDown, leider kein LostFocus- und ein selbst gezimmertes
Sub cbo()_LostFocus funktioniert nicht.

(Die ganze Sache ist bei Word-VBA wohl etwas anders, als bei VB6.0 oder Access-VBA, mit denen ich hauptsächlich arbeite.)

CU
Markus

Hi Maria,
richtig: VBA Word.

Sub Test()_LostFocus
cbo1.SetFocus
End Sub

gehorcht mir nicht. Kannst Du den Schnipsel so ändern, daß er funktioniert? Danke.
Gruß Wilhelm

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]