excel - 将变量值分配给变量键
问题描述
我需要在 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 的变量 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
遵循一些提示和发现,Dictionary 解决了我的问题。
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 Scripting Runtime”旁边的复选框
- scrrun.dll 文件的全名和路径将显示在列表框下方
- 单击确定按钮。
推荐阅读
- splunk - 使用 mstats 过滤掉值
- twig - 如何在树枝中获得时间?
- flutter - Flutter 插件 just_audio 示例错误然后处理
- python - Python:下载 Outlook 附件并在保存时更改文件名
- c# - C# 使用 C++ dll 中的函数,以 std::vector 作为参数
- text - 如何使用 FreeType / HarfBuzz 查找垂直文本的列宽
- c# - 我应该为需要反序列化的每个请求创建一个新的 JsonSerializer 对象吗?
- android - 我正在尝试将 firebase 添加到我的颤振项目中,但我不断收到此错误找不到方法实现()
- python - 根据字段值在 csv 中创建子列
- c# - 实体框架第一次查询比第二次慢得多