在运行时无法在 VBA 中按名称请求变量。在编译期间,所有变量名都被删除,并且在运行时变量仅通过内存位置引用。此外,如果变量在子程序中声明,则它仅在执行子程序时存在。如果您稍后尝试访问它,其他东西将使用它的内存位置。
这样做的唯一方法是在模块级别声明所有变量,然后使用一个函数将变量名显式映射到这些变量:
Private variable1 As Integer
Sub code()
variable1 = 2
End Sub
Sub code2()
Sheets(2).Range("a1").Value = VariableByName(Sheets(1).Range("a1").Value)
End Sub
Function VariableByName(VarName As String) As Variant
Select Case VarName
Case "variable1": VariableByName = variable1
End Select
End Function
实际上,您最好的选择是忘记使用变量并改用名称:
Sub code()
Names.Add "variable1", 2, Visible:=False
End Sub
Sub code2()
Sheets(2).Range("a1").Value = Evaluate(Sheets(1).Range("a1").Value)
End Sub
但是当你走这条路时,如果你需要访问 VBA 中的变量,你不能只说variable1
,你需要使用这样的代码:
Sub code3()
Dim variable1 As Integer
variable1 = Evaluate("variable1") 'bring it into a normal variable
variable1 = variable1 * 2 'now you can use it like a normal variable
Names("variable1").RefersTo = variable1 'need to save it when you're done
End Sub