想要使用字符串值以名称访问变量

K-D*_*Doe 0 vba

我想通过用两个不同的字符串构造一个变量来获取变量的值.

把它分解到最低限度:

TA = 1
TB = 2
TC = 3
B = 2

Messagebox.Show(B*("T"+"B"))
Run Code Online (Sandbox Code Playgroud)

我知道这是最小的,我不想在复杂的代码中使用它.我也知道有办法做到这一点,但我在一个功能最少的环境中工作.

那么有一个基本的方法吗?

JNe*_*ill 7

你不能像那样动态地引用变量.这是违法的.通常,当人们开始这样思考时,答案是"使用数组".相反,根据你的例子,字典是最好的:

使用字典的示例:

Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")

dict.Add "TA", 1
dict.Add "TB", 2
dict.Add "TC", 3
b=2

MessageBox.Show(B*(dict("T" & "B")))
Run Code Online (Sandbox Code Playgroud)

"T" & "B"被连接到一起是"TB",然后将获取valuekey "TB"在你的字典里dict2和做数学.

Dictionary是很好的学习,因为它的疯狂强大.您可以将任何内容存储在字典中(包括其他字典),而不仅仅是数字和字符串值.

最后,这个例子对字典对象使用后期绑定很好,但是当你编写代码并从头开始学习时没有代码提示没有代码提示是一种垃圾.

而是转到工具>>参考,然后检查列表中的Microsoft Scripting Runtime框.然后你可以使用你的字典,就好像它是原生的:

Dim dict As Dictionary
Set dict = New Dictionary

dict.Add "TA", 1
....
Run Code Online (Sandbox Code Playgroud)

至于带阵列的解决方案.一般人都会问这样的事情:

"为什么这不起作用?"

Dim var1, var2, var3, var4
var1="hi "
var2="there "
var3="what's "
var4="up."

For i=1 to 4
    output=output & (var & i)
Next

MsgBox(output)
Run Code Online (Sandbox Code Playgroud)

这与这里的问题非常相似.我们可以使用数组代替"动态变量":

Dim arrayVar(1 to 4) As String
arrayVar(1)="hi "
arrayVar(2)="there "
arrayVar(3)="what's "
arrayVar(4)="up."

For i=1 to 4
    output=output & arrayVar(i)
Next

MsgBox(output)
Run Code Online (Sandbox Code Playgroud)

  • "一般来说,当人们开始这样思考答案是" - 我完全期待"使用PHP"那里;-) (2认同)