访问集合时出错
我在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 :
一个参数可能超出了允许值的范围