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
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
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]
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]
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]
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.)