2015-01-21 2 views
-1

Из кода это очень легко понять, что я хочу, но ничего не работает до сих пор:Присвоить массив в коллекции

Sub test() 
    Dim C As New Collection 
    Dim A() As String 

    ReDim A(0, 1) 
    A(0, 0) = "row 0, col 0" 
    A(0, 1) = "row 0, col 1" 

    C.Add A(0), "first" ' subscript out of range error 

    Debug.Print C.Item("first")(0) & ", " & C.Item("first")(1) 
End Sub 

Итак, я просто хочу, чтобы иметь массив в качестве члена коллекции.

Любая помощь очень ценится.

ответ

1

Вы не ищете коллекцию, а словарь.

  1. Добавить Microsoft Scripting Runtime к вашим ссылкам (Инструменты/Ссылки);

  2. Слегка пересмотреть свой код, используя словарь вместо коллекции:

    Sub test() 
        Dim C As New Scripting.Dictionary '<-- not collection 
        Dim A() As String 
    
        ReDim A(0, 1) 
        A(0, 0) = "row 0, col 0" 
        A(0, 1) = "row 0, col 1" 
    
        C.Add "first", A '<-- key first, item then 
    
        Debug.Print C("first")(0, 0) & ", " & C("first")(0,1) <-- you need to access the elements properly (bi-dimensional) 
    
    End Sub 
    

Как для ошибки («выхода за пределы»), это зависит от плохого использования массива. Вы определяете его как A(0 to 0, 0 to 1), поэтому вы не можете использовать его, как если бы он был одномерным.

+1

«Вы не ищете коллекцию, а словарь». Почему ты это сказал? Вторая часть вашего ответа - это решение, но мне любопытно узнать о первой части. Почему бы не использовать коллекцию. –

Смежные вопросы