Reputation: 255
I have two listboxes and am trying to add items from List 1 to List 2, and then be able to remove multiple items from List 2 at once. Note that List 1 stays stagnant (this is how it is supposed to be).
I have the adding items working right:
'Add the selected items to List 2
Dim i As Integer
If lst1.ItemsSelected.Count > 0 Then
i = 0
While i < lst1.ListCount
If lst1.Selected(i) Then
lst2.AddItem (lst1.ItemData(i) & ";" & lst1.Column(1, i) & ";")
lst1.Selected(i) = False
End If
i = i + 1
Wend
End If
However, when I try to remove the items from List 2 in a similar way, it only recognises the first selected item as selected and skips over the other items that I have selected. This is the problem. Here is my code:
'Remove the selected items from List 2
Dim i As Integer
If lst2.ItemsSelected.Count > 0 Then
i = lst2.ListCount - 1
While i >= 0
If lst2.Selected(i) Then
lst2.RemoveItem (i)
lst2.Selected(i) = False
End If
i = i - 1
Wend
End If
How can I get this working correctly?
Upvotes: 5
Views: 32125
Reputation: 1
I used this Code it works fine
Dim ArraySlctd() As Variant 'this Arry is to save what row is selected because when remove any row all selected are getting false
ReDim ArraySlctd(0 To Me.List1.ListCount - 1)
For lp = 0 To Me.List1.ListCount - 1 '
ArraySlctd(lp) = Me.List1.Selected(lp) 'work in the same range as the selected property
Next lp
Now its simple to use
For lp = 0 To Me.List1.ListCount - 1
If ArraySlctd(lp) = True Then
'Remove Or Change(by remove and AddIten with the same Index)
End If
Next lp
Upvotes: 0
Reputation: 1641
Same Concept as @Fionnuala with the exception that I used a collection which I generally find more flexible:
Dim i As Integer
Dim listColl As Collection
Dim Item As Variant
Set listColl = New Collection
With Me.listAvailable
' Add Selected Items to Collection (MultiSelect Listbox)
For i = 0 To .ListCount - 1
If .Selected(i) Then
listColl.Add .ItemData(i)
End If
Next i
End With
For Each Item In listColl
Me.listSelected.AddItem Item
Me.listAvailable.RemoveItem Item
Next Item
Upvotes: 0
Reputation: 91356
As far as I can tell, as soon as you remove one item, all items become unselected, so:
Dim itm As Variant
Dim srem As String
Dim asrem As Variant
For Each itm In lst2.ItemsSelected
srem = srem & "," & itm
Next
asrem = Split(Mid(srem, 2), ",")
For i = UBound(asrem) To 0 Step -1
lst2.RemoveItem lst2.ItemData(asrem(i))
Next
Note also that this is Access and you are dealing with a value list, so Replace on the text of Row Source will also work.
Upvotes: 8
Reputation: 53623
Try using a for/next loop instead of While?
Something like this works in PPT/XLS, should be similar in Access I think.
For i = lst2.ListCount - 1 to 0 step -1
If lst2.Selected(i) = True Then
lst2.RemoveItem(i)
End If
Next
Upvotes: 7