Vityata
Vityata

Reputation: 43585

VBA - Set dictionary with convert to string e.g. EVAL

Hello friendly and nice people. The idea is the following - I have one dictionary of dictionaries and I would like to set it with a loop and not each one separately. Any idea how to do it?

So far I have something like this:

Public Sub mains()

    Dim my_dict     As Object
    Dim d1          As Object
    Dim d2          As Object
    Dim d3          As Object
    Dim d4          As Object
    Dim d5          As Object
    Dim d6          As Object
    Dim d7          As Object
    Dim d8          As Object
    Dim i           As Long

    Set my_dict = CreateObject("Scripting.dictionary")

    For i = 1 To 8
        set cstr(d & i) = createobject("scripting.dictionary")
    Next i

End Sub

Is it doable in VBA? The set cstr("d"& i) gives an error of course, but I want something similar and not to set the dictionaries one by one.

Upvotes: 1

Views: 723

Answers (1)

jsheeran
jsheeran

Reputation: 3037

You can't construct variable names programmatically. Use an array instead.

Dim dicts(8) As Variant
For i = 0 To 7
    Set dicts(i) = New Dictionary
Next i

Alternatively, since your goal is to build a dictionary of dictionaries, you can do this directly:

Dim dict as new Dictionary, tmp as Dictionary
For i = 0 to 7
    Set tmp = new Dictionary
    dict.add "d" & i + 1, tmp
next i

Upvotes: 2

Related Questions