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

时间:2014-02-05 09:32:53

标签: vba excel-vba excel

我正在研究vba宏。我试图使用字典。但它给error 457调试器指向toprow.Add ActiveCell.value, val。任何人都可以告诉这个问题吗?我甚至在类似问题的答案中提到了Cstr(activecell.value), Cstr(val)

Dim toprow As New Dictionary, Dictkey As Variant
Dim val As String

Range("A1").Activate 
i = 0
Do Until i = ColLen
    val = Chr(65 + i)
    toprow.Add ActiveCell.value, val
    i = i + 1
    ActiveCell.Offset(0, 1).Activate
Loop

3 个答案:

答案 0 :(得分:20)

仅当密钥尚不存在时,才能使用带有字典的Add个密钥。无意中你可以输入密钥,你是watching调试监视器的密钥,然后立即创建密钥。 (=如果您在字典中观看某个键,如果它尚不存在则会创建它。)

你必须

  • 确保您没有使用调试器观看密钥
  • 通过在d.Exists(keyname)上进行测试然后使用d.Add keyname, value方法
  • 来创建唯一条目
  • 或者您可以使用d.Item(keyname) = value
  • 默认覆盖现有密钥

答案 1 :(得分:0)

我收到了同样的错误消息:“错误此密钥已与此集合的元素相关联”。在我的情况下,问题是我有这个:

'assign values to properties
Property Let EmployeeName(Valor As String)
    m_employeename = Valor
End Property
Property Let EmployeeID(Valor As String)
    m_employeename = Valor
End Property

我应该有这个:

'assign values to properties
Property Let EmployeeName(Valor As String)
    m_employeename = Valor
End Property
Property Let EmployeeID(Valor As String)
    m_employeeid = Valor
End Property

也许你只需要仔细检查你的“Property Let”代码,看看你是否为你班级中私有的变量使用了适当的名称。

答案 2 :(得分:-1)

如果你想要做的就是跳过抛出此错误的记录,你也可以添加一些非常基本的错误处理。我只是将下面的行直接插入到为我生成此错误的那一行的上方,现在它很高兴地移动,忽略了用于抛出此错误的重复键。

On Error Resume Next