VBA - 从组合框中删除项目

时间:2017-09-01 12:47:22

标签: excel vba excel-vba

我在尝试删除组合框中的重复项目时遇到的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 个答案:

答案 0 :(得分:3)

以下是一些可疑项目:

  1. 同时迭代和删除通常需要很多关注。您可以轻松地结束错误,因为您正在尝试使用已删除的内容。

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

  3. 在这种情况下不应该导致问题,但不要在此处使用括号:CompteCOMBO.RemoveItem (j)

  4. 我没有在组合框中删除重复项,而是首先过滤掉重复项。使用Dictionary,它具有方便的Exists功能。要使用它,您需要添加对 Microsoft Scripting Runtime 的引用。在工具>中找到它引用。像这样的东西会起作用:

    第1单元

    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