Excel VBA按无下划线单元格分组行时遇1004错误求助
Excel VBA分组行报错(Runtime Error 1004)解决方法
错误原因
最后一行代码报错是因为循环结束后startr的值可能大于lr(最后一行行号):
- 当表格最后一行本身是无下划线单元格时,
startr会被设置为lr+1,此时构造的范围A[lr+1]:A[lr]是无效的单元格范围,触发1004错误。 - 原代码未处理相邻无下划线单元格的情况,此时
startr会大于endr,同样导致无效范围。
修正后的代码
Sub GroupCellsSameFormat() Dim r As Integer, lr As Integer, startr As Integer, endr As Integer lr = Cells(Rows.Count, "A").End(xlUp).Row startr = 0 ' 从第1行开始遍历,避免遗漏首行的无下划线单元格 For r = 1 To lr If Range("A" & r).Font.Underline = False Then If startr <> 0 Then endr = r - 1 ' 确保起始行不大于结束行,避免无效范围 If startr <= endr Then Range("A" & startr & ":A" & endr).Rows.Group End If End If ' 更新分组起始行为当前行的下一行 startr = r + 1 End If Next r ' 处理最后一组,仅当起始行有效时执行分组 If startr <= lr Then Range("A" & startr & ":A" & lr).Rows.Group End If End Sub
关键修正点
- 遍历范围调整:从第1行开始遍历,避免遗漏首行是无下划线单元格的情况。
- 无效范围校验:每次分组前判断
startr <= endr,避免相邻无下划线单元格导致的无效范围。 - 最后一组判断:增加
startr <= lr的校验,确保最后一次分组的范围合法。
内容的提问来源于stack exchange,提问作者Jazzoulay
相关产品推荐
相关产品推荐

