Переменная Dim из строкового текста

#arrays #vba #loops #variables #declaration

Вопрос:

Я пытаюсь затемнить вектор внутри цикла. Я хотел бы затемнять переменную с другим именем на каждой итерации, например:

 Dim a as String

For i = 1 to 10
    a = "vector_" amp; i
    Dim a() as Double
Next i
 

Итак, в этом конкретном случае мне нужно 10 двойных переменных: vector_1, vector_2, vector_3… Конечно, этот код неверен.

Есть простой способ сделать это?

Спасибо.

Комментарии:

1. Эта попытка не сработает. Однако, почему бы вам не объявить вектор как массив? Dim vector(1 To 10) As Double

2. Могу я спросить, с какой целью нужно создавать такие переменные?

3. Просто назидательное любопытство, но так как VBA всегда читает объявления переменных в начале, я вижу, что это невозможно, ха-ха-ха-ха

Ответ №1:

Вы не можете объявлять имена переменных в цикле. Переменные должны быть скомпилированы перед их запуском, и компилятор VBA не работает с циклами.

В любом случае, вы можете подумать о создании словаря и записи ключей в цикле:

 Sub TestMe()

    Dim a As String
    Dim i As Long
    
    Dim foo As Object
    Set foo = CreateObject("Scripting.Dictionary")
    
    For i = 1 To 10
        a = "vector_" amp; i
        foo.Add a, i * i
    Next i
    
    Debug.Print foo("vector_5") 'prints 25

End Sub