VBA循环中创建编号变量遇语法错误求助
解决VBA动态命名变量赋值的语法错误问题
嘿,你遇到的这个问题其实是VBA语法里的一个常见坑——VBA不允许直接通过字符串拼接的方式动态创建并赋值变量。
你之前用Worksheets("Bond_" & CStr(i))能正常运行,是因为这是在访问Worksheets集合里的成员,集合本身支持用字符串索引来定位元素;但suminterest_& CStr(i)这种写法是试图在运行时动态生成变量名,而VBA的变量名是在编译阶段就确定好的,根本不支持这种操作,所以才会触发语法错误。
下面给你两种行业内处理这类批量变量需求的标准解决方案:
方案1:使用数组(首推,适配你的连续编号场景)
数组天生就是为这种有规律的批量数据设计的,比手动创建20个独立变量高效太多:
Sub CalculateSumInterest() ' 定义一个索引从1到20的数组,对应你想要的suminterest_1到suminterest_20 Dim suminterest(1 To 20) As Double Dim i As Integer, wam1 As Integer ' 这里假设wam1已经有你需要的数值,先给个示例值方便测试 wam1 = 10 For i = 1 To 20 ' 直接给数组对应位置的元素赋值 suminterest(i) = Excel.WorksheetFunction.Sum( _ Worksheets("Bond_" & CStr(i)).Range( _ Worksheets("Bond_" & CStr(i)).Cells(8, 5), _ Worksheets("Bond_" & CStr(i)).Cells(7 + wam1, 5) _ ) _ ) Next i ' 后续使用时,直接用suminterest(1)、suminterest(2)...就能拿到对应的值 ' 比如在立即窗口输出第一个结果测试 Debug.Print suminterest(1) End Sub
方案2:使用字典(适合更灵活的键名需求)
如果之后你需要的不是纯数字编号,而是更自定义的键名,可以用Scripting.Dictionary来存储:
Sub CalculateSumInterestWithDict() Dim suminterestDict As Object Dim i As Integer, wam1 As Integer ' 后期绑定字典,不需要额外添加引用 Set suminterestDict = CreateObject("Scripting.Dictionary") wam1 = 10 ' 示例值 For i = 1 To 20 ' 把"suminterest_" & i作为键,存储计算出的结果 suminterestDict("suminterest_" & i) = Excel.WorksheetFunction.Sum( _ Worksheets("Bond_" & CStr(i)).Range( _ Worksheets("Bond_" & CStr(i)).Cells(8, 5), _ Worksheets("Bond_" & CStr(i)).Cells(7 + wam1, 5) _ ) _ ) Next i ' 访问时用键名:suminterestDict("suminterest_1") Debug.Print suminterestDict("suminterest_1") End Sub
另外给你个小优化建议:把当前循环的工作表对象先赋值给一个变量,避免重复写长长的Worksheets("Bond_" & CStr(i)),代码会更简洁易读,也减少出错概率:
For i = 1 To 20 Dim ws As Worksheet Set ws = Worksheets("Bond_" & CStr(i)) suminterest(i) = Excel.WorksheetFunction.Sum(ws.Range(ws.Cells(8, 5), ws.Cells(7 + wam1, 5))) Next i
内容的提问来源于stack exchange,提问作者tyler
相关产品推荐
相关产品推荐

