2

我在电子表格列中有大量变量名称。这些变量在我的项目中的模块中定义并具有值。

我想要一个引用电子表格中的变量名的代码,并返回它在模块中的值并将值粘贴到另一个电子表格中,即

Sub code()

    dim variable1 as integer
    variable1 = 2 

End sub

sheet 1: cell A1: variable1

Sub code2()
    sheet(2).range("a1").value = sheet(1).range("a1").value
end sub

sheet 2: cell A1: 2
4

2 回答 2

4

在运行时无法在 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
于 2013-08-20T19:46:45.357 回答
0

这在 Excel 2010 中有效

variable1 = [variable1].Value

VBA 将 [variable1](带括号)视为引用命名单元的变体。

-mmh

于 2013-09-16T19:39:00.597 回答