VBA运行时错误'1004':单条数据Range.Autofill跳过处理问题咨询
错误原因
- 1004报错的核心诱因是本次测试仅存在1行数据:你代码中取A列最后一行的逻辑
Cells(Rows.Count, "A").End(xlUp).Row返回值为1,此时自动填充的目标范围会变成B2:B1这类起始行大于结束行的无效区间,Range.Autofill不支持对这类无效范围操作,直接触发报错。 On Error Resume Next未生效大概率是VBA编辑器的错误捕获配置问题:进入VBA编辑器的「工具→选项→常规」页面,若错误捕获项选择了「所有错误都中断」,不管有没有写容错语句都会触发报错弹窗,改成「未处理的错误中断」即可恢复容错语句的作用。
优化方案
完全不需要依赖On Error Resume Next或者GoTo这类容错逻辑,提前判断行数再执行填充逻辑即可,代码稳定性更高:
' 先计算A列最后一行行号 Dim lastRow As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row ' 只有最后一行行号大于等于2时才需要执行自动填充 If lastRow >= 2 Then Range("B2").AutoFill Destination:=Range("B2:B" & lastRow) Range("C2").AutoFill Destination:=Range("C2:C" & lastRow) ' 剩下的所有Autofill语句都放到这个判断里即可 End If
额外优化建议:你当前代码里大量用Select+ActiveCell赋值的逻辑可以直接简化,比如把Range("F2").Select : ActiveCell.FormulaR1C1 = "xxx"直接改成Range("F2").FormulaR1C1 = "xxx",运行效率更高,也不会因为激活状态变化触发意外错误。
内容的提问来源于stack exchange,提问作者colette
相关产品推荐
相关产品推荐

