VBA错误:此键已与此集合的元素相关联

时间:2017-01-09 17:26:30

标签: excel vba excel-vba

我使用下面的代码从excel中的范围创建一个集合,然后用于填充userform上的列表框。代码在两个单独的宏中已经工作好几个月,但突然两个都停止工作并在标题中抛出错误。

Private Sub UserForm_Initialize()

    Dim ws As Worksheet
    Dim LR As Long
    Dim cell As Range
    Dim List As New Collection
    Dim Item As Variant
    Set ws = Worksheets("ExpenseCATs")

    With ws
       LR = .Cells(.Rows.Count, 1).End(xlUp).Row

       For Each cell In .Range("A2:A" & LR)
            With cell
                On Error Resume Next
                List.Add .Text, CStr(.Value)   <---------- Error
                On Error GoTo 0
            End With
        Next cell

        For Each Item In List
                        EXPListBox1.AddItem Item
        Next Item

    End With

由于所有条目都是文本,我将错误行的一部分注释掉,如下所示

List.Add .Text ', CStr(.Value)

这不会引发错误,但列表框不会填充唯一值,而是列出单元格区域中的所有项目。

我已查看过有关此错误的其他帖子,但无法解决。任何人都可以建议如何解决,也对为什么可能已经停止工作感兴趣。

2 个答案:

答案 0 :(得分:3)

在VBA项目中,选项 - &gt;常规 - &gt;错误捕获,请检查Break On Unhandled Errors

:)

答案 1 :(得分:0)

我相信在将项目添加到集合并且之前已使用过密钥时会发生此错误。 .add(key,value)与Dictionary对象的顺序相反

Collection.add(item [,Key])
Dictionary.add(Key, item)  

例如:

Dim c As New Collection
c.add "Value1", Key:="one"
c.add "Value2", Key:="two"
c.add "Value3", Key:="one" '<----- this is where the error occurs because of duplicate key

当然,我无法从你的代码中猜出.value,但我之前看到过这个错误。您确定.Value是唯一的吗?