访问集合时出错[Excel VBA]

时间:2014-08-24 19:03:34

标签: excel vba collections

我在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

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

请协助。

1 个答案:

答案 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")

的问题完全相同 @Dick Kusleika总结了他评论中的观点:
" bs.Range(N3:N9)中的值与ds.Range(AF2:AF7)中的值不同。他们可能看起来一样,但他们不是。"

Run-time error 5 on MSDN

  

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