繁体   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