防止重复项目从Listbox1添加到列表框2(VBA excel)

我有两个ListBoxes。 ListBox1有可以被用户select的项目列表,通过双击该项目或按下添加button来转移到ListBox2。 我现在要做的是防止用户在ListBox2中添加重复项。 如果检测到重复,则会有一条消息提示“已包含的项目”并结束代码。 我猜这可以用包含? 但我不知道该怎么做。 我有以下代码:

'Report Listing Private Sub UserForm_Initialize() 'List of Reports With ListBox1 .AddItem "Report 1" .AddItem "Report 2" .AddItem "Report 3" .AddItem "Report 4" .AddItem "Report 5" .AddItem "Report 6" End With End Sub 'Add selection to ListBox2 Private Sub AddButton_Click() With ListBox1 Dim itemIndex As Integer For itemIndex = .ListCount - 1 To 0 Step -1 If .Selected(itemIndex) Then ListBox2.AddItem .List(itemIndex) End If Next itemIndex End With End Sub 'Double click to Add Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) ListBox2.AddItem ListBox1.List(ListBox1.ListIndex) End Sub 

如果任何人仍然感兴趣,还有另一种方法来做到这一点,使用类似的技术。

 Sub Duplicate() dim i as integer dim x as integer x = 0 For i = 0 to listbox2.count - 1 If listbox2.list(i) = myval Then x = x + 1 End If Next i If x = 0 Then listbox2.additem myval End If End Sub 

myval是从listbox1中select的值。

本质上,如果它在列表中find对您的值的单一引用,它将启动一个计数器。 如果没有find您的值的实例,它会将其插入到列表框中。

希望这有助于某人。

像这样的东西将有望帮助你..

AddValueListbox2函数检查是否存在某个值,如果不存在,则将其添加,如果是则提醒用户。

注意:如果您为列表框启用了多选function,这起作用。


  Private Sub CommandButton1_Click() 'index is -1 if nothin is selected If ListBox1.ListIndex = -1 Then Exit Sub 'loop backwards as we're removing items For i = ListBox1.ListCount - 1 To 0 Step -1 If ListBox1.Selected(i) Then AddValueListbox2 ListBox1.List(i) ListBox1.RemoveItem (i) End If Next i End Sub Private Function AddValueListbox2(str As String) Dim valExists As Boolean valExists = False For i = 0 To ListBox2.ListCount - 1 If ListBox2.List(i) = str Then valExists = True Next i If valExists Then MsgBox str & " has already been added to ListBox", vbInformation Else ListBox2.AddItem str End If End Function Private Sub UserForm_Activate() Dim items(2) As String items(0) = "foo" items(1) = "bar" items(2) = "baz" For i = LBound(items) To UBound(items) Me.ListBox1.AddItem items(i) Next i End Sub