VBA 使用集合创建唯一列表时出现错误 457
VBA Error 457 when using Collection to create a unique list
背景:
我正在尝试从具有的日期列表中确定我有多少个独特的时间段。在其他地方,我看到了一种利用集合和错误捕获(正确的术语?我的意思是 "On Error Resume Next" 在任何情况下)来构建具有唯一值的集合的方法。我什至在我编写的其他代码中成功地使用了这个结构,但在我目前的情况下,我得到一个 "Error 457: This key is already associated with an element of this collection." 认为我错误地使用了集合,我打开了我 6 个月前写的一些旧代码(在不同公司的不同计算机上),它使用相同的结构并且为 WORK 所知。这段较旧的代码因相同的相同错误而中断,而它以前没有这样做过。这是我正在进行的代码示例:
Dim rng as range
Dim TimePeriod as Collection
Set TimePeriod = New Collection
For Each rng In Range("I2:I6")
On Error Resume Next
TimePeriod.Add rng.Value, CStr(rng.Value) 'This is where the code breaks
On Error GoTo 0
Next rng
问题:
我想知道是否有一个设置或参考库我不知何故丢失导致两段代码中断,或者如何确定,因为这两个代码在功能上是相同的,并且之前测试过的令人满意的代码像我一样中断工作正在进行中。我希望 "On Error Resume Next" 强制循环传递错误。有什么建议吗?
--Update--
范例数据("I2:I6")如下:
1/21/15
1/21/15
1/21/15
1/23/15
1/27/15
尝试删除 On Error Goto 0
行。看看这个:
Difference between 'on error goto 0' and 'on error goto -1' -- VBA
它来自 Visual Basic 6,但在 VBA 中的工作原理几乎相同。如果您保留 On Error Resume Next
行但删除 On Error Goto 0
行,应该可以工作。
您的代码在我的 Excel 2007 上正常运行,尽管为了提高效率,我会重写它以将整个循环包含在 on error resume next 中。
我怀疑您现在看到这些错误是因为 mis-set 宏选项错误中断。
检查Tools/Options您没有选择在出现所有错误时中断
背景: 我正在尝试从具有的日期列表中确定我有多少个独特的时间段。在其他地方,我看到了一种利用集合和错误捕获(正确的术语?我的意思是 "On Error Resume Next" 在任何情况下)来构建具有唯一值的集合的方法。我什至在我编写的其他代码中成功地使用了这个结构,但在我目前的情况下,我得到一个 "Error 457: This key is already associated with an element of this collection." 认为我错误地使用了集合,我打开了我 6 个月前写的一些旧代码(在不同公司的不同计算机上),它使用相同的结构并且为 WORK 所知。这段较旧的代码因相同的相同错误而中断,而它以前没有这样做过。这是我正在进行的代码示例:
Dim rng as range
Dim TimePeriod as Collection
Set TimePeriod = New Collection
For Each rng In Range("I2:I6")
On Error Resume Next
TimePeriod.Add rng.Value, CStr(rng.Value) 'This is where the code breaks
On Error GoTo 0
Next rng
问题: 我想知道是否有一个设置或参考库我不知何故丢失导致两段代码中断,或者如何确定,因为这两个代码在功能上是相同的,并且之前测试过的令人满意的代码像我一样中断工作正在进行中。我希望 "On Error Resume Next" 强制循环传递错误。有什么建议吗?
--Update--
范例数据("I2:I6")如下:
1/21/15
1/21/15
1/21/15
1/23/15
1/27/15
尝试删除 On Error Goto 0
行。看看这个:
Difference between 'on error goto 0' and 'on error goto -1' -- VBA
它来自 Visual Basic 6,但在 VBA 中的工作原理几乎相同。如果您保留 On Error Resume Next
行但删除 On Error Goto 0
行,应该可以工作。
您的代码在我的 Excel 2007 上正常运行,尽管为了提高效率,我会重写它以将整个循环包含在 on error resume next 中。
我怀疑您现在看到这些错误是因为 mis-set 宏选项错误中断。
检查Tools/Options您没有选择在出现所有错误时中断