VBA-从组合框中删除项

VBA-从组合框中删除项,vba,excel,Vba,Excel,我在尝试删除组合框中的重复项时遇到了一个未指定的错误 我首先使用RowSource属性添加项。 然后我想使用removietem属性删除重复的值 我得到的错误是在这一行生成的:CompteCOMBO.removietem(j) 提前谢谢你的帮助 祝你过得愉快 Jean以下是一些可疑物品: 同时迭代和删除通常需要非常小心。您可能很容易以错误告终,因为您正试图处理已删除的内容 对于CompteCOMBO.ListCount-1的j=i+1,请小心这一行。对于j=5到4,它最终的计算结果类似于 在这种

我在尝试删除组合框中的重复项时遇到了一个
未指定的错误

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

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

提前谢谢你的帮助

祝你过得愉快


Jean

以下是一些可疑物品:

  • 同时迭代和删除通常需要非常小心。您可能很容易以错误告终,因为您正试图处理已删除的内容

  • 对于CompteCOMBO.ListCount-1的j=i+1,请小心这一行
    。对于j=5到4,它最终的计算结果类似于

  • 在这种情况下,它不应该引起问题,但不要在此处使用括号:
    CompteCOMBO.removietem(j)

  • 我不会在组合框中删除重复项,而是先过滤掉重复项。使用
    字典
    ,它有一个方便的
    存在
    功能。要使用它,您需要添加对Microsoft脚本运行时的引用。在工具>参考中找到它。类似这样的方法会奏效:

    模块1

    Sub ShowUserform()
        With New UserForm1
            .Show vbModal
        End With
    End Sub
    
    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
    
    UserForm1

    Sub ShowUserform()
        With New UserForm1
            .Show vbModal
        End With
    End Sub
    
    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
    

    以下是一些可疑项目:

  • 同时迭代和删除通常需要非常小心。您可能很容易以错误告终,因为您正试图处理已删除的内容

  • 对于CompteCOMBO.ListCount-1的j=i+1,请小心这一行
    。对于j=5到4,它最终的计算结果类似于

  • 在这种情况下,它不应该引起问题,但不要在此处使用括号:
    CompteCOMBO.removietem(j)

  • 我不会在组合框中删除重复项,而是先过滤掉重复项。使用
    字典
    ,它有一个方便的
    存在
    功能。要使用它,您需要添加对Microsoft脚本运行时的引用。在工具>参考中找到它。类似这样的方法会奏效:

    模块1

    Sub ShowUserform()
        With New UserForm1
            .Show vbModal
        End With
    End Sub
    
    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
    
    UserForm1

    Sub ShowUserform()
        With New UserForm1
            .Show vbModal
        End With
    End Sub
    
    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
    

    你好,谢谢你的回答。我对这个脚本语言不太了解。这是一个公司项目,我知道如何使用代码添加库,但对于我所面临的问题(IMO)来说有点复杂。我只是不明白为什么我不能从我的组合框中删除项目???嗨@Jean。我鼓励你熟悉字典。它们被广泛使用,并且在尝试创建唯一列表时非常有用(如上面所示)。这并不是说你要导入任何新的东西,它只是Excel的标准库之一…@Jean FIC,我添加了一些需要注意的东西。但我不打算专门测试代码。如前所述,我强烈建议从另一个角度攻击它。它确实可以使用:arr=Application.Transpose(ThisWorkbook.Sheets(“任务”).Range(“ComptesExistant”)@Jean-FIC,对不起,我的格式错了——更新了,谢谢你的回答。我对这个脚本语言不太了解。这是一个公司项目,我知道如何使用代码添加库,但对于我所面临的问题(IMO)来说有点复杂。我只是不明白为什么我不能从我的组合框中删除项目???嗨@Jean。我鼓励你熟悉字典。它们被广泛使用,并且在尝试创建唯一列表时非常有用(如上面所示)。这并不是说你要导入任何新的东西,它只是Excel的标准库之一…@Jean FIC,我添加了一些需要注意的东西。但我不打算专门测试代码。我强烈建议从另一个角度来攻击它,如上所述。它确实可以使用:arr=Application.Transpose(ThisWorkbook.Sheets(“任务”).Range(“ComptesExistant”)@Jean-FIC,抱歉,我这里的格式错了--已更新