【问题标题】:VBA Error 457 when using Collection to create a unique list使用 Collection 创建唯一列表时出现 VBA 错误 457
【发布时间】:2015-01-16 20:19:36
【问题描述】:

背景: 我试图从日期列表中确定我有多少个独特的时间段。在其他地方,我看到了一种利用集合和错误捕获的方法(正确的术语?我的意思是“在任何情况下,“On Error Resume Next”)来构建具有唯一值的集合。我什至在我编写的其他代码中成功地使用了这个结构,但在我目前的情况下,我得到一个“错误 457:这个键已经与这个集合的一个元素相关联”。考虑到我错误地使用了该集合,我打开了一些我在 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--

range("I2:I6")中的样本数据如下:

1/21/15
1/21/15
1/21/15
1/23/15
1/27/15

【问题讨论】:

  • 为了改善您的问题并“帮助我们帮助您”,我建议您给我们一个示例数据以放入 Range("I2:I6") 以复制错误。
  • @MatteoNNZ 我应该包含样本数据。对不起。现在添加。
  • @MatteoNNZ 不过,有一件事:我在另一台计算机上测试了它,它工作正常。我认为这是一个设置而不是代码问题。我希望您不会在示例数据中遇到错误。
  • 我认为错误来自您的示例数据具有重复日期的事实。 “密钥已与此集合相关联”,因为您尝试添加到集合中的内容已经存在。不过,我在我的电脑上尝试了你的代码,它只是在添加到集合时跳过了重复的日期

标签: vba collections unique-index


【解决方案1】:

您的代码在我的 Excel 2007 上可以正常运行,尽管为了提高效率,我会重写它以将整个循环包含在 on error resume next 中。

我怀疑您现在看到错误是因为错误设置的宏选项错误中断。

检查您未选择的工具/选项以在所有错误上中断

【讨论】:

  • 就是这样。我不明白我应该参加“Break on Unhandled Errors”。我现在很好。谢谢!!!!!!
【解决方案2】:

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

【讨论】:

  • 这与 err.clear 有何不同,在 VBA 帮助中有记录,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多