Словарь VBA Excel внутри словаря поздняя привязка



Следующий код завершается ошибкой в инструкции debug



Sub Tets()
Dim cl_data As Object
Set cl_data = CreateObject("Scripting.Dictionary")
Dim row As Object

Dim irow As Long
For irow = 11 To 12
Set row = CreateObject("Scripting.Dictionary")
With row
row.Add "YN", Cells(irow, 2).Value
row.Add "Comment", Cells(irow, 3).Value
End With
cl_data.Add Cells(irow, 1).Value, row
Next irow
Debug.Print cl_data(CStr(Cells(irow, 1)))("YN")
End Sub


Введите описание изображения здесь



Я пытаюсь сохранить данные из столбцов A, B и C. "внешний словарь должен иметь значение из столбца A в качестве ключа, внутри находится другой словарь с данными из столбца b, сохраненными с ключом "YN", и данными из столбца c, сохраненными с ключом"Comment".

517   2  

2 ответов:

Проблема здесь в том, что после вашего цикла.

For irow = 11 To 12
     '…
Next irow

Debug.Print irow возвращает 13. И этого нет в вашем словаре, потому что Вы читаете только строки 11 и 12.

Попробуйтеrow как массив объектов и сбросьте irow до чего-то в пределах границ после выхода из цикла.

Sub Tets()

    Dim irow As Long, cl_data As Object, row(11 To 12) As Object

    Set cl_data = CreateObject("Scripting.Dictionary")

    For irow = 11 To 12
        Set row(irow) = CreateObject("Scripting.Dictionary")
        With row(irow)
            .Add "YN", Cells(irow, 2).Value
            .Add "Comment", Cells(irow, 3).Value
        End With
        cl_data.Add Key:=Cells(irow, 1).Value, Item:=row(irow)
    Next irow

    irow = 11
    Debug.Print cl_data(CStr(Cells(irow, 1)))("YN")
    irow = 12
    Debug.Print cl_data(CStr(Cells(irow, 1)))("YN")

End Sub

Comments

    Ничего не найдено.