Вы не можете ссылаться на переменную динамически, как это.Это противозаконно.Обычно, когда люди начинают думать таким образом, ответом является «Использовать массив».Вместо этого, учитывая ваш пример, лучше всего использовать словарь:
Пример с использованием словаря:
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
dict.Add "TA", 1
dict.Add "TB", 2
dict.Add "TC", 3
b=2
MessageBox.Show(B*(dict("T" & "B")))
То, что "T" & "B"
объединяется вместе, чтобы иметь значение "TB"
, а затем извлекает value
at key
"TB"
в вашем словаре dict
, который является 2
и выполняет математику.
Dictionary
хорошо для изучения, потому что он невероятно мощный.Вы можете хранить что угодно в словаре (включая другие словари), не только числовые и строковые значения.
Наконец, в этом примере используется поздняя привязка для объекта словаря, что приятно, но вы не получите подсказки кодакогда вы пишете свой код и изучаете его с нуля без подсказок кода, это выглядит как мусор.
Вместо этого перейдите в Инструменты >> Ссылки и установите флажок Microsoft Scripting Runtime в списке.Тогда вы можете использовать свой словарь, как если бы он был родным:
Dim dict As Dictionary
Set dict = New Dictionary
dict.Add "TA", 1
....
Что касается решения с массивом.Обычно люди спрашивают что-то вроде:
«Почему это не работает?»
Dim var1, var2, var3, var4
var1="hi "
var2="there "
var3="what's "
var4="up."
For i=1 to 4
output=output & (var & i)
Next
MsgBox(output)
Что очень похоже на вопрос здесь.Вместо «Динамическая переменная» мы можем использовать массив:
Dim arrayVar(1 to 4) As String
arrayVar(1)="hi "
arrayVar(2)="there "
arrayVar(3)="what's "
arrayVar(4)="up."
For i=1 to 4
output=output & arrayVar(i)
Next
MsgBox(output)