VBA为UsedRange排除前6行表头加边框 报运行时错误424求解
错误原因
代码触发运行时错误424的核心原因有两点:
Set语句的作用是给对象变量赋值,而.Select是执行选中操作的方法,没有返回值,Set rng2=intersect(rng, rng.offset(6)).select等号右侧不是合法的区间对象,直接触发对象缺失错误。- 缺少边界校验逻辑:如果工作表
con-1的已用区域总行数小于等于6,Intersect(rng, rng.Offset(6))会返回空值(Nothing),后续对空对象操作边框也会抛出错误。 - 正式代码不需要调用
.Select方法选中区间,直接操作区间对象即可,能减少界面刷新提升运行效率,.Select仅适合调试阶段临时验证范围。
可直接运行的实现代码
Dim rng As Range Dim targetRng As Range Set rng = Worksheets("con-1").UsedRange ' 校验已用区域行数,避免空对象错误 If rng.Rows.Count > 6 Then ' 定位排除前6行表头后的有效数据范围 Set targetRng = Intersect(rng, rng.Offset(6)) ' 为范围添加常规细实线边框 With targetRng.Borders .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With End If
调试阶段验证范围的正确写法
如果需要临时选中范围确认定位是否正确,要把对象赋值和选中操作拆成两行写,不要合并到同一句Set语句里:
Set targetRng = Intersect(rng, rng.Offset(6)) ' 先判断对象非空再执行选中,避免报错 If Not targetRng Is Nothing Then targetRng.Select End If
内容的提问来源于stack exchange,提问作者NotACoderNoah
相关产品推荐
相关产品推荐

