访问集合时出错

我在VBA中遇到麻烦。 我收到“运行时错误5:无效的过程调用或参数”错误。

这是我的代码:

Public c As Collection Public Sub imageRows() Set c = New Collection Set masterBook = ActiveWorkbook Set ds = masterBook.Sheets("Sheet4") 'Getting Image URLS For Each sku In ds.Range("AF2:AF7") 'data sheet 'c.Add "Data1", "Key1" rNum = sku.Row 'Adding Image URLs c.Add ds.Range("BF" & rNum).Value, sku & "-" & 1 c.Add ds.Range("BG" & rNum).Value, sku & "-" & 2 c.Add ds.Range("BH" & rNum).Value, sku & "-" & 3 c.Add ds.Range("BI" & rNum).Value, sku & "-" & 4 c.Add ds.Range("BJ" & rNum).Value, sku & "-" & 5 MsgBox c.Item(sku & "-" & 4) '=========THIS WORKS Next sku Set bs = masterBook.Sheets("Sheet5") 'bulk upload sheet 'Inserting Rows 'Getting Image URLS For Each sku In bs.Range("N3:N9") 'data sheet 'c.Add "Data1", "Key1" MsgBox sku.Value '======WORKS, GIVES VALID VALUE MsgBox c.Item(sku & "-" & 4) '========THIS CRASHES Next sku End Sub 

该程序总是崩溃,我第二次尝试访问该集合。 我认为这是一个范围问题,但我把这个集合全球化,它仍然发生。

请协助。

如果您用于访问项目的密钥存在,则可能会发生这种情况(我的意思是:指的是没有项目)

一个例子:

 Public c As Collection Private Sub CommandButton1_Click() Set c = New Collection c.Add "sentence1", "key1" Debug.Print c.Item(1) ' Prints "sentence1" Debug.Print c.Item("key1") ' Prints "sentence1" Debug.Print c.Item("keyThatDoesntExist") ' FAILS ! Run-time error 5 End Sub 

总结:

所以我想你会得到Run-time error 5: Invalid procedure call or argument因为sku & "-" & 4不是c的有效键,并且什么都不指向。
这是我用Debug.Print c.Item("keyThatDoesntExist")完全相同的问题

@Dick Kusleika在他的评论中总结得很好:
bs.Range(N3:N9)中的值与ds.Range(AF2:AF7)的值不一样,它们可能看起来一样,但它们不是。

MSDN上运行时错误5 :

一个参数可能超出了允许值的范围