VBA – 从combobox中删除项目

我正努力尝试删除重复的项目,我有我的combobox中的Unspecified Error

我首先使用RowSource属性添加项目。 然后,我想使用RemoveItem属性删除重复的值。

我得到的错误是在这一行生成的: CompteCOMBO.RemoveItem(j)

  With CompteCOMBO .Visible = True .RowSource = "Missions!ComptesExistant" End With For i = 0 To CompteCOMBO.ListCount - 1 Valeur = CompteCOMBO.List(i) For j = i + 1 To CompteCOMBO.ListCount - 1 If Valeur = CompteCOMBO.List(j) Then CompteCOMBO.RemoveItem (j) 'ERROR HERE End If Next j Next i 

感谢您提前帮助。

祝你有美好的一天,

吉恩

以下是一些可疑项目:

  1. 同时迭代和删除通常需要很多的关心。 你可以很容易地结束了错误,因为你正在尝试使用已经被删除的东西。

  2. 注意这行For j = i + 1 To CompteCOMBO.ListCount - 1 。 它最终将评估为像For j = 5 to 4

  3. 它不应该在这种情况下引起问题,但不要在这里使用括号: CompteCOMBO.RemoveItem (j)

他们在combobox后,而不是删除重复,我会首先筛选出重复。 使用一个有一个方便的Exists函数的Dictionary 。 要使用它,您需要添加对Microsoft脚本运行时的引用。 在工具>参考中find它。 像这样的东西可以工作:

第一单元

 Sub ShowUserform() With New UserForm1 .Show vbModal End With End Sub 

UserForm1

 Private Sub UserForm_Initialize() Dim arr As Variant, v As Variant Dim d As Scripting.Dictionary Set d = New Scripting.Dictionary arr = Array("a", "b", "a") 'or similarly: 'arr = Application.Transpose(ThisWorkbook.Worksheets("Missions").Range("CompetesExistant")) For Each v In arr If Not d.Exists(v) Then d.Add v, v Next v Me.ComboBox1.List = d.Keys End Sub