我需要在Excel VBA中即时创建变量,例如,用户在变量NAME和AGE中键入Name和Age。假设用户在NAME中键入PETER,在AGE中键入34,我希望VBA创建一个内容为34的变量PETER。这可以在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
以上内容对我无济于事,因为它与创建内容为PETER的变量“ NAME”相同,在评估显示34时。我需要内容为34的变量PETER。
问题是;
PERSON="PETER"
AGE="34"
Name.Add Name:=PERSON RefersTo:=Age
创建一个变量PERSON = 34,而不是PETER = 34。
Name.Add Name:=Evaluate(Person)
...不起作用。
请帮忙吗?
更新自2019年3月22日下午1:38
通过一些技巧和发现,字典可以解决我的问题。
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
将创建一个包含内容33的条目名称“ foo”。
要更改任何现有条目,只需
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
答案 0 :(得分:1)
您还可以使用一个名为cPerson的简单类
Option Explicit
Public pName As String
Public pAge As Long
一个例子可能像这样
Option Explicit
Sub TestIt()
Dim dict As New Scripting.Dictionary
Dim person As cPerson
Dim key As Variant
Set person = New cPerson
With person
.pName = "Peter"
.pAge = 34
dict.Add .pName, person
End With
Set person = New cPerson
With person
.pName = "John"
.pAge = 43
dict.Add .pName, person
End With
For Each key In dict.Keys
With dict(key)
Debug.Print .pName, .pAge
End With
Next
Debug.Print dict("Peter").pAge
Debug.Print dict("John").pAge
End Sub
更新,您需要在Excel中设置对VB脚本运行时库的引用。