我在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
第二次尝试访问该集合时,程序总是崩溃。我认为这是一个范围问题,但我把这个集合全局化了,它仍然发生了。
请协助。
答案 0 :(得分:1)
如果用于访问项目的密钥不存在,则可能会发生这种情况(我的意思是:指的是没有项目)
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")
bs.Range(N3:N9)
中的值与ds.Range(AF2:AF7)
中的值不同。他们可能看起来一样,但他们不是。"
参数可能超出允许值的范围