Ссылка на массив в словаре VBA - PullRequest
0 голосов
/ 20 марта 2020

Я не могу выяснить, как сохранить и получить доступ к массиву в словаре VBA.

У меня есть ключ с несколькими элементами, например, «Apple» со значением «3» и количеством «5».

Один элемент не будет проблемой, ie: dict ("Яблоки") = 3

Но как мне сохранить и получить несколько значений? Допустим, я хочу добавить «Яблоки, 3, 5», а затем перейти в ячейку C4 и автоматически вставить туда яблоки, 3 в C5 и 5 в C6.

Пока я пробовал:

Dim last_row As Long
last_row = Cells(Rows.Count, 1).End(xlUp).Row
Dim last_col As Long
last_col = ActiveSheet.UsedRange.Columns.Count

Dim strVal As String
Dim Item(0 To 99) As String
Dim header As Range
Dim rng As Range

For Each rngCell In Range(Cells(1 + i, 1), Cells(last_row, 1))
    i = i + 1
    strVal = rngCell.Text
    If Not dict.Exists(strVal) Then
            n = 0
            For Each headerCell In Range(Cells(i, 2), Cells(i, last_col))
                n = n + 1
                Item(n) = headerCell.Text
                'MsgBox headerCell.Text
            Next headerCell
            dict(strVal) = Item
    Else
        MsgBox "already exists"
    End If
Next rngCell

Dim Items(0 To 99) As String
sFruit = InputBox("Check value of key")
Items = dict(sFruit)
MsgBox "The value of " & sFruit & " is " & Items(2)

Это последняя часть, которая не работает. Независимо от того, объявляю ли я Items как Variant, String или Object, или даже если я помещаю Item = Items (2) над окном сообщения и ссылаюсь на это. Я не могу извлечь какую-либо информацию из массива, извлеченного из словаря.

1 Ответ

0 голосов
/ 23 марта 2020

Вот пример того, как записать массивы в словари и как получить к ним доступ позже.

Option Explicit

Public Sub DictArrayExample()
     Dim dict As Object
     Set dict = CreateObject("Scripting.Dictionary")

     'create an array
     Dim Arr() As Variant
     Arr = Array("Item1", "Item2", "Item3") 'Array Index 0 to 2

     'write the array into dictionary
     dict.Add "apples", Arr

     'or directly into dictionary without variable
     dict.Add "bananas", Array("banana1", "banana2")


     'directly access array inside dictionary
     Debug.Print dict("apples")(1) 'index 1 = Item2

     'get the array from the dictionary into another variable
     Dim RetrieveArr() As Variant
     RetrieveArr = dict("apples")

     'access array in that variable
     Debug.Print Join(RetrieveArr, ", ")
     Debug.Print RetrieveArr(0) 'index 0 = Item 1
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...