如何在VBA中将变量赋值给间接引用的变量?
VBA 动态命名变量赋值解决方案
VBA 中没有像 Excel 工作表函数那样的 INDIRECT 可以直接给动态命名的变量赋值,你之前的写法失效是因为该函数仅用于单元格引用,无法操作VBA内部变量。以下是几种可行的实现方式:
方法1:使用字典(推荐)
字典通过“键-值”对的形式存储数据,完全满足你按动态名称关联值的需求,且易于维护和扩展:
Sub AssignValuesViaDictionary() Dim valueMap As Object Set valueMap = CreateObject("Scripting.Dictionary") Dim N As Integer Dim targetValue As Double For N = 1 To 4 ' 模拟你的存储变量,按示例生成对应值 targetValue = 123 + 333 * (N - 1) ' 以"T1"/"T2"等作为键,存入对应数值 valueMap("T" & N) = targetValue Next N ' 测试读取(可根据需求替换为业务逻辑) Debug.Print valueMap("T1") ' 输出 123 Debug.Print valueMap("T2") ' 输出 456 Debug.Print valueMap("T3") ' 输出 789 End Sub
方法2:使用数组(适合序号化变量)
如果你的 T1-T4 只是按序号排列的变量,用数组是更高效的选择:
Sub AssignValuesViaArray() Dim T(1 To 4) As Double Dim N As Integer For N = 1 To 4 T(N) = 123 + 333 * (N - 1) Next N ' 测试读取 Debug.Print T(1) ' 123.00 Debug.Print T(2) ' 456.00 End Sub
方法3:模块级变量结合 CallByName(仅作参考)
如果一定要使用 T1-T4 这类独立命名的变量,需先将变量声明为模块级,再通过 CallByName 赋值:
- 在模块顶部声明公共变量:
Public T1 As Double, T2 As Double, T3 As Double, T4 As Double
- 在过程中赋值:
Sub AssignValuesViaCallByName() Dim N As Integer Dim targetValue As Double For N = 1 To 4 targetValue = 123 + 333 * (N - 1) ' 给对应模块变量赋值 CallByName Me, "T" & N, VbLet, targetValue Next N ' 测试读取 Debug.Print T3 ' 789.00 End Sub
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

