Мне нужно создавать переменные на лету в Excel VBA, как, например, пользователи вводят Имя и Возраст внутри переменных NAME и AGE.Предположим, пользовательский тип PETER в NAME и 34 в AGE, я хочу, чтобы VBA создал переменную PETER с содержимым 34. Это можно легко сделать в PHP.
Мне удалось заставить его работать:
Person = Cells(10, 1).Value 'suppose it is "PETER"
Age = Cells(11, 1).Value 'suppose it is "34"
Создание переменной
Names.Add Name:=Person, RefersTo:=Age
Получение ее
Debug.Print Person ' prints PETER
Debug.Print Evaluate(Person) ' prints 34
Debug.Print PETER ' Variable PETER does not exist
Вышемне не помогает, так как это то же самое, что создание переменной «NAME» с содержимым PETER, когда оценивается показ 34. Мне нужна переменная PETER с содержимым 34.
Проблема в том, что;
PERSON="PETER"
AGE="34"
Name.Add Name:=PERSON RefersTo:=Age
создает переменную PERSON = 34, а не PETER = 34.
Name.Add Name:=Evaluate(Person)
... не работает.
Любая помощь, пожалуйста?
Обновление от 22.03.2009 1:38 pm
Следуя некоторым советам и открытиям, Словарь - это то, что решает мою проблему.
Sub T1()
Dim MAGIC As New Scripting.Dictionary
AnyVar = "R10" 'sets [AnyVar] = "R10"
Magic(AnyVar) = 25 'sets [R10] = "25"
Magic("ARTEN") = "R10" '[ARTEN] points to R10
Magic("R10") = 33 'sets [R10] = "33"
N5 = Magic("ARTEN") 'sets N5 = "R10"
N6 = Magic(N5) 'sets N6 = [R10] (33)
Debug.Print N5 & " = " & N6
End Sub
Это напечатано "R10 = 33 ", именно то, что я хотел иметь.Итак, теперь с помощью словаря я могу создавать переменные на лету и легко находить или изменять их значения.
Чтобы создать новую запись в Magic (словарь):
Magic.Add key:="name", Item:=33
Если текст междуцитаты, новая запись будет тем текстом.Если без кавычек, предполагается, что это переменная, содержащая имя / значение.
V25 = "foo"
V26 = 33
Magic.Add key:=V25, Item:=V26
Создает имя записи "foo" с содержимым 33.
Чтобы изменить любую существующую запись, просто
V25 = "foo"
V26 = 33
V29 = "fee"
V30 = "faa"
Magic(V25) = V26 '[foo] = 33
Magic("foo") = 38 '[foo] = 38
Magic(V29) = 39 '[fee] = 39
Magic(V25) = Magic(V29) + 1 '[foo] = [fee]+1 = 40
dictionary(V30) = V25 '[faa] = [V25] = "foo"
debug.print Magic(V30) 'prints "foo"
debug.print Magic(Magic(V30)) 'prints 40
V40 = "Paul"
V41 = "Smith"
Magic(V40) = V41
debug.print Magic("Paul") 'print Smith
Если имя записи "foo" существует, оно изменит содержимое на содержимое V26, если запись не существует, она создаст ее.
Итак, вы неДля создания записи нужно использовать формальный способ.
Magic.Add key:=V25, Item:=V26