VBA中如何使用变量调用行号?运行提示缺少列表分隔符或右括号
VBA宏报错排查及修正方案
核心报错原因
你遇到的语法报错完全是因为VBA中字符串拼接+变量引用的写法错误,错误点如下:
Rows(i:i).Select写法错误:VBA不会自动识别冒号两侧的i为变量,正确写法是直接简化为Rows(i).Select,或按拼接规则写为Rows(i & ":" & i).SelectRange("A"&"i-1":"C"&"i-1").Select写法错误:你把变量计算逻辑i-1放在了引号里,VBA会把它识别为普通字符串而非变量运算,同时冒号的拼接位置错误,正确写法是Range("A" & (i-1) & ":C" & (i-1)).SelectRange("E"&i:"AO"&i).Select写法错误:冒号需要放在引号内,和前后的列标识拼接,正确写法是Range("E" & i & ":AO" & i).Select
额外代码逻辑问题
除了语法报错外,你的代码还有录制宏带来的冗余和逻辑问题:
ActiveWorkbook.SaveAs放在循环内会导致每循环一次就覆盖保存一次文件,完全没有必要,应该移到循环外- 大量使用
Select、Activate是录制宏的冗余写法,执行效率极低,且容易触发工作表切换导致的异常,可以全部省略直接操作单元格对象 AutoFill Destination:=Range("E37:AO37")写死了填充目标为37行,和你的循环变量i完全脱节,应该改为对应i行的范围
修正后的完整代码
Sub 修改后的宏() Dim i As Long ' 提前声明变量避免隐式声明报错 For i = 6 To 22370 Step 5 ' 插入行 Rows(i).Insert Shift:=xlDown ' 给D列赋值 Range("D" & i).Value = "xyz" ' 复制上一行A到C列的内容 Range("A" & (i - 1) & ":C" & (i - 1)).Copy Destination:=Range("A" & i) ' 给E列写公式 Range("E" & i).FormulaR1C1 = "=R[-1]C*R[4]C" ' 自动填充到AO列 Range("E" & i).AutoFill Destination:=Range("E" & i & ":AO" & i), Type:=xlFillDefault ' 清空剪切板 Application.CutCopyMode = False Next ' 保存文件放在循环结束后,仅存一次即可 ActiveWorkbook.SaveAs Filename:="tute.xlsm", _ FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False End Sub
内容的提问来源于stack exchange,提问作者fede_97
相关产品推荐
相关产品推荐

