从 ListBox 中删除 i 以外的项目

Remove Item from ListBox other than i

基本上我有两个组合框。 1 过滤数据,以便在单元格中显示具有特定值的列表。第二个组合框基本上从列表框中的列表中删除数据。但是我想要的是删除列表框中显示的值以外的值。因此,如果我 select XYZ 我希望我的代码删除列表框中没有 XYZ 的所有行,而不是删除带有 XYZ 的行。请在下面查看我的代码,如果您认为我也应该进行任何其他更改,请告诉我。谢谢你。

Private Sub ComboBox2_Change()

   On Error Resume Next
   For i = 0 To ListBox1.ListCount
       If ComboBox2.Value = ListBox1.List(i, 6) Then
          ListBox1.RemoveItem (i)
       End If
   Next i

End Sub

listbox1是这样填的:

Sub FillListBox()
    Dim data() As Variant
    data = Array("AAA", "CCC", "CCC", "Vityata", "was", "here")
    ListBox1.List = data
End Sub

看起来像这样:

任务是删除所有不同于 "CCC" 的项目,而不会出现错误。从 VBA 中的列表中删除最好颠倒过来。否则列表的计数会导致错误,只要列表小于删除项目之前的列表:

Private Sub ComboBox1_Change()

    Dim i As Long
    For i = ListBox1.ListCount - 1 To 0 Step -1
        Debug.Print ListBox1.List(i)
        If ListBox1.List(i) <> "CCC" Then
            Debug.Print "Removing "; ListBox1.List(i); " from "; i
            ListBox1.RemoveItem (i)
        End If
    Next i

End Sub

最后但并非最不重要的一点是,如果您需要在代码中 On Error Resume Next 才能使其正常工作,很可能会出现问题并且不会引起注意。尽量避免。