簡體   English   中英

將變量值分配給變量鍵

[英]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腳本運行時庫的引用。

  • 若要引用此庫,請加載Visual Basic編輯器(ALT + F11)
  • 從下拉菜單中選擇工具>參考。
  • 將顯示可用參考的列表框
  • 勾選“ Microsoft腳本運行時”旁邊的復選框
  • scrrun.dll文件的全名和路徑將顯示在列表框下方
  • 單擊確定按鈕。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM