2015-01-16 68 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幫助中記錄的, –