2015-01-16 116 views
0

背景: 我试图从已确定的日期列表中确定有多少个独特的时间段。在其他地方,我已经看到了一种利用集合和错误陷印的方法(在任何情况下,我的意思是“在错误继续下一个”上)来构建具有唯一值的集合。我甚至在我编写的其他代码中成功地使用了这个结构,但是在我目前的情况下,我得到了一个“Error 457:这个键已经与这个集合的一个元素相关联。”考虑到我错误地使用了这个集合,我打开了一些我6个月前写过的代码(在另一家公司的另一台计算机上),它使用相同的结构,并且WORK已知。这个较旧的代码破坏了以前没有做过的相同的错误。这里是我的工作正在进行代码示例:使用集合创建唯一列表时VBA错误457

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 
+0

要提高你的问题,“帮我们帮助你”

检查工具/选项,我建议你给我们一个样本数据放入范围(“I2:I6”)以复制错误。 –

+0

@MatteoNNZ我应该包含示例数据。抱歉。现在添加它。 – wackojacko1997

+0

@MatteoNNZ一件事,但:我在另一台计算机上测试了它,它工作。我认为这是一个设置而不是代码问题。我希望你不会在样本数据中出错。 – wackojacko1997

回答

1

您的代码可以在我的Excel 2007上正常工作,但我会重写它以将错误恢复中的整个循环封装在效率下。

我怀疑你现在正在看到错误,因为错误的宏选项错误中断。你没有选择,以打破所有错误

enter image description here

+0

这就是它。我不明白,我应该一直在“打破未处理的错误”。我现在很好。谢谢!!!!!! – wackojacko1997

-1

尝试摆脱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一行,应该可以工作。

+0

这与在VBA帮助中记录的err.clear有什么不同,这是在VBA帮助中记录的, –