Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

Code macht nur teilweise, was er soll | Herbers Excel-Forum


Betrifft: Code macht nur teilweise, was er soll von: Uppe
Geschrieben am: 02.02.2010 16:51:53

Hallo Experten,

wi in der Betreffzeile schon steht, habe ich einen Code, der nur zum Teil das macht, was er soll. Aber ich kann den Fehler nicht finden.

Ich habe eine Userform mit zwei Listboxen.
In der linken stehen alle möglichen Werte, in die rechte sollen die ausgewählten Werte (mit dem Pfeil in der Mitte) eingetragen werden.
Das klappt.

Nun gibt es Abhängigkeiten. Wenn ich AAA auswähle, soll auch CCC in die rechte Liste eingetragen werden. Klappt auch.

Wenn DDD ausgewählt wird, soll auch BBB in die rechte Liste geschrieben werden. Das klappt nicht! Warum nicht?
Es klappt nicht, wenn der Index des "abhängigen Wertes" kleiner ist als der Index des Ausgangswertes. Aber warum nicht? Die Schleife durchläuft doch alle Werte!? Markiert wird der Wert in der linken Liste, aber nicht rübergeschoben.

https://www.herber.de/bbs/user/67693.xls

Vielen Dank fürs Helfen!
Gruß Uppe

  

Betrifft: Das machen Kinder und Haustiere auch so... ;-) von: NoNet
Geschrieben am: 02.02.2010 17:10:10

Hallo Uppe,

auch Kinder, Haustiere (und manche Erwachsene) machen manchmal nicht das, was sie sollen...
Im Gegensatz dazu macht der Code aber zumindest DAS, was Du ihm "sagst" :

Mit der Zeile lstAlle.Selected(j) = FALSE deaktivierst Du das "abhängige Element" innerhalb der FOR...NEXT-Schleife wieder...es wird daher nicht in das zweite Listenfeld übertragen.

Mein Vorschlag :
Ersetze diese Zeile : lstAlle.Selected(j) = True
Durch diese Zeile : lstWahl.AddItem lstAlle.List(j) 'Vor "Exit FOR"

Dadurch werden die abhängigen Elemente gar nicht erst aktiviert, sondern sofort in lstWahl übertragen.

Bleibt nur zu klären, was passieren soll, wenn :
Ausgangswert CCC von AAA abhängig ist und z.B. Ausgangswert EEE von CCC.

Soll dann bei Auswahl EEE sowohl CCC wie auch AAA kopiert werden ?

Gruß, NoNet

PS: Viel Erfolg noch mit der "Kinder- und Haustier-Erziehung ;-)"


  

Betrifft: Danke für den Tipp! von: Uppe
Geschrieben am: 02.02.2010 17:47:08

Hallo NoNet,

bei Haustieren kann ich nicht mitreden, aber bei Kindern kann ich das Problem bestätigen

Leider hilft mir Dein Vorschlag nicht 100% weiter.
Es wird noch ein Ereignis angestossen, wenn ein Wert aus der lstAlle ausgewählt wird. Dies passiert leider nicht, wenn ich den Wert direkt in lstWahl eintrage

ABER: Der Tipp mit der zu frühen "Deaktivierung" des Ausgangswertes hat mir geholfen.
Ich habe lstAlle.Selected(i) = FALSE aus der FOR...NEXT-Schleife herausgenommen. Nach der FOR...NEXT-Schleife durchlaufe ich nochmal die komplette Liste und deaktiviere die ausgewählten Werte. So klappt es!

Die Dreierkonstellation bei den Abhängigkeiten, die Du beschrieben hast, gibt es nicht. Zum Glück!

Gruß Uppe