Liste: removeItem in Verbindung mit ItemsSelected

28/04/2008 - 17:56 von Tim Germer | Report spam
Hallo,

(Umgebung: WinXP und A03) ich habe eine Listbox (Typ Werteliste,
Multiselect), in der ich Zeilen markiere. Per VBA wird dann anhand der
selektierten Zeilen ein SQL-Statement abgesetzt. So weit, so gut.

Jetzt sollen nur die selektieren Zeilen aus der Listbox gelöscht
werden. Ich habe es mir folgendem Code probiert:

For Each Kreis In Kreisliste.ItemsSelected
Kreisliste.RemoveItem Kreisliste.ItemData(Kreis)
Next

Das Problem scheint zu sein, dass nach dem ersten RemoveItem die
Selektion aufgehoben wird, wodurch keine weiteren Zeilen entfern
werden, da die Schleife nichts selektiertes mehr findet. Dies habe ich
beim schrittweisen durchlaufen der Schleife festgestellt.

Ich habe es auch schon mit ListCount und Selected probiert, aber auch
da wird anscheinend die Selektion aufgehoben, so dass sich für mich
RemoveItem als der Übeltàter darstellt.

Als mögliche Lösung ist mir bisher nur eingefallen, alle Zeilen (bis
auf die mit Selected=True) in ein Array auszulesen und danach die
Werteliste neu aufzubauen und der Listbox wieder zuzuweisen. Das
scheint mir aber sehr umstàndlich und ich mag nicht daran glauben,
dass es nicht einen einfacheren Weg gibt. OH und Google haben mir
nicht weitergeholfen.

Habt Ihr eine Lösung?

Viele Grüße

Tim
 

Lesen sie die antworten

#1 Jörg Ackermann
28/04/2008 - 18:24 | Warnen spam
Hallo,

Tim Germer meinte:

Jetzt sollen nur die selektieren Zeilen aus der Listbox gelöscht
werden. Ich habe es mir folgendem Code probiert:

For Each Kreis In Kreisliste.ItemsSelected
Kreisliste.RemoveItem Kreisliste.ItemData(Kreis)
Next

Das Problem scheint zu sein, dass nach dem ersten RemoveItem die
Selektion aufgehoben wird, wodurch keine weiteren Zeilen entfern
werden, da die Schleife nichts selektiertes mehr findet. Dies habe ich
beim schrittweisen durchlaufen der Schleife festgestellt.



Durchlaufe die Auflistung rückwàrts

sinngemàß:

For i = Kreisliste.ItemsSelected.Count - 1 To 0 Step -1
Kreisliste.RemoveItem Kreisliste.ItemData(i)
Next i

Gruß

Ähnliche fragen