VBA: Listbox verhält sich störrisch!

Hallo,

ich habe in einer VBA-Applikation unter Excel ein Formular, das eine Listbox enthält. In dieser Listbox sind immer 18 Einträge aufgeführt, von denen aber in Abhängigkeit von einer Variablen nur bestimmte Zeilen ausgewählt werden können. Das zumindest ist das Ziel. Die blöde Listbox hat aber eine eigene Meinung dazu:

Nachdem ich Schwierigkeiten mit dem Change-Ereignis der Listbox hatte (wurde immer viermal ausgeführt, keine Ahnung, wo die letzten drei Trigger herkommen), bin ich auf KeyUp und MouseUp umgestiegen. Von da aus rufe ich jeweils eine Sub auf, in der die besagte Variable geprüft wird. Sollte sie einen bestimmten Wert haben, wird der Listindex der Listbox fest auf 11 bzw. 12 eingestellt. Das wird auch ausgeführt - wenn ich im Einzelschritt durchgehe, kann ich das in der Listbox beobachten, und auch der Listindex wird entsprechend zurückgegeben.

Das Problem ist nun: Sowie die Ereignis-Routine für KeyUp bzw. MouseUp verlassen wird, springt der Curser der Listbox auf den alten Wert zurück. Meine Änderung wird also einfach wieder verworfen.

Das passiert nicht, wenn ich den Listindex „von außen“ ändere, also z.B. über einen Button-Klick. Das funktioniert wunderbar. Ich bekomme aber meinen Trigger nun einmal nur über die Änderung der Listbox. Hat jemand eine Idee, wie ich dieses störrische Verhalten der Listbox umgehen kann und zu einer bleibenden Änderung komme?

Danke!
Kristian

Hallo, Kristian!

ich habe in einer VBA-Applikation unter Excel ein Formular,
das eine Listbox enthält. In dieser Listbox sind immer 18
Einträge aufgeführt, von denen aber in Abhängigkeit von einer
Variablen nur bestimmte Zeilen ausgewählt werden können. Das

Das ist nicht eingängig für den Benutzer. Alle Einträge einer Listbox sollten ausgewählt oder was auch immer werden können. Ich würde ggf. ein Abhängigkeit der Variablen den Inhalt der Listbox beschränken.

Nachdem ich Schwierigkeiten mit dem Change-Ereignis der
Listbox hatte (wurde immer viermal ausgeführt, keine Ahnung,
wo die letzten drei Trigger herkommen), bin ich auf KeyUp und

Am besten mal durchtracen. Wenn Du mit „Listbox = Hollaröhdulijöh“ einen Wert zuweist, löst das auch schon mal ein Change aus. Wenn Du dann dort reagierst, einem anderen Control ebenfalls einen Wert zuweist und in diesem Change ebenso der Listbox, kannst Du ganz schnell in Teufels Küche kommen…

MouseUp umgestiegen. Von da aus rufe ich jeweils eine Sub auf,
in der die besagte Variable geprüft wird. Sollte sie einen
bestimmten Wert haben, wird der Listindex der Listbox fest auf
11 bzw. 12 eingestellt. Das wird auch ausgeführt - wenn ich im
Einzelschritt durchgehe, kann ich das in der Listbox
beobachten, und auch der Listindex wird entsprechend
zurückgegeben.

Das Problem ist nun: Sowie die Ereignis-Routine für
KeyUp bzw. MouseUp verlassen wird, springt der Curser der
Listbox auf den alten Wert zurück. Meine Änderung wird also
einfach wieder verworfen.

Das passiert nicht, wenn ich den Listindex „von außen“ ändere,
also z.B. über einen Button-Klick. Das funktioniert wunderbar.
Ich bekomme aber meinen Trigger nun einmal nur über die
Änderung der Listbox. Hat jemand eine Idee, wie ich dieses
störrische Verhalten der Listbox umgehen kann und zu einer
bleibenden Änderung komme?

Kapiere ich gerade nicht genau. Poste mal den Code. Aber ich vermute mal: Du reagierst auf das Mausereignis, willst den Wert anders setzen, aber das Mausereignis sagt: „Hey, ich Krass-Ereignis, ich klick doch auf Eintrag 7, sag ich dir krass, lass ich mich doch nicht verscheißern, ey! Verbuch dein Stümperversuch mit setz-mich-wert mal voll unter Ulk, klaro!“? Das sollte Dir zeigen, dass die gewählten Ereignisse nicht die brauchbaren sind. Du müsstest dann irgendwie den Fortgang des Ereignisses unterbinden.

Aber der Einfachheit halber (und der Verständlichkeit für den Anwender) würde ich die Listbox eh eindampfen auf das, was auswählbar ist.

Gruß, Manfred

Hi Manfred,

ich habe in einer VBA-Applikation unter Excel ein Formular,
das eine Listbox enthält. In dieser Listbox sind immer 18
Einträge aufgeführt, von denen aber in Abhängigkeit von einer
Variablen nur bestimmte Zeilen ausgewählt werden können. Das

Das ist nicht eingängig für den Benutzer. Alle Einträge einer
Listbox sollten ausgewählt oder was auch immer werden können.
Ich würde ggf. ein Abhängigkeit der Variablen den Inhalt der
Listbox beschränken.

Ja, würde ich auch so machen.

Am besten mal durchtracen. Wenn Du mit „Listbox =
Hollaröhdulijöh“ einen Wert zuweist, löst das auch schon mal

Ahaaa, noch einer mit Jodeldiplom!?

…aber das Mausereignis sagt: „Hey, ich
Krass-Ereignis, ich klick doch auf Eintrag 7, sag ich dir
krass, lass ich mich doch nicht verscheißern, ey! Verbuch dein
Stümperversuch mit setz-mich-wert mal voll unter Ulk, klaro!“?

Hey, Dein Text wär’ doch schon mal eine Basis für einen VBA-Rap, odrr? :smiley:

Martin