5

2 つのリストボックスがあり、リスト 1 からリスト 2 に項目を追加しようとしています。その後、リスト 2 から複数の項目を一度に削除できます。リスト 1 は停滞したままであることに注意してください (これが本来あるべき姿です)。

アイテムの追加が正しく機能しています:

'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

ただし、同様の方法でリスト 2 からアイテムを削除しようとすると、最初に選択したアイテムのみが選択済みとして認識され、選択した他のアイテムはスキップされます。これが問題です。これが私のコードです:

'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

これを正しく機能させるにはどうすればよいですか?

4

4 に答える 4

8

私の知る限り、1つのアイテムを削除するとすぐに、すべてのアイテムが選択解除されるため、次のようになります。

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

これはAccessであり、値リストを処理しているため、行ソースのテキストの置換も機能することにも注意してください。

于 2013-02-07T12:42:51.407 に答える
7

While の代わりに for/next ループを使用してみてください。

このようなものは PPT/XLS で機能し、Access でも似ているはずです。

For i = lst2.ListCount - 1 to 0 step -1
    If lst2.Selected(i) = True Then
        lst2.RemoveItem(i)
    End If
Next
于 2013-02-07T07:08:51.303 に答える
0

私はこのコードを使用しました

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 

簡単に使えるようになりました

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
于 2020-07-09T22:23:57.337 に答える