[英]Assign a variable value to a variable key
我需要在Excel VBA中動態創建變量,例如,用戶在變量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的Variable PETER。
問題是;
PERSON="PETER"
AGE="34"
Name.Add Name:=PERSON RefersTo:=Age
創建一個變量PERSON = 34,而不是PETER = 34。
Name.Add Name:=Evaluate(Person)
...不起作用。
有什么幫助嗎?
從03/22/2019 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
將創建一個包含內容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
您還可以使用一個名為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腳本運行時庫的引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.