You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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 赋值:

  1. 在模块顶部声明公共变量:
Public T1 As Double, T2 As Double, T3 As Double, T4 As Double
  1. 在过程中赋值:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:26:24