VBA宏执行多一次循环并抛出Return without Gosub错误求助
问题分析与修复
错误原因
- Return without Gosub报错:你用
GoSub EndTime跳转到标签执行,跑完Return会回到GoSub的下一行,但后续代码会继续往下走,再次碰到Return时没有对应的GoSub触发,所以报错。而且这段GoSub完全多余,直接执行代码就行。 - 结束列循环多跑一次:判断单元格非空的条件
Cells(EndValueCell, 3) > 0逻辑有问题——空白单元格会被Excel视为0,碰到空白时>0不成立循环停止,但如果单元格有非数值内容(比如文本),这个判断会出错。另外用Integer存行号不安全,Excel行数远超Integer的最大值(32767),建议换Long类型。
修复后的代码
Sub Macro7() ' ' Macro7 Macro ' Dim StartValueCell As Long StartValueCell = 3 Dim EndValueCell As Long EndValueCell = 3 ' 找开始列第一个空白单元格 Do While Not IsEmpty(Cells(StartValueCell, 2)) StartValueCell = StartValueCell + 1 Loop ' 录入开始时间 With Cells(StartValueCell, 2) .Value = Now .NumberFormat = "HH:MM:SS" End With ' 找结束列第一个空白单元格 Do While Not IsEmpty(Cells(EndValueCell, 3)) EndValueCell = EndValueCell + 1 Loop ' 录入结束时间 With Cells(EndValueCell, 3) .Value = Now() .NumberFormat = "HH:MM:SS" End With End Sub
额外优化(可选)
如果要更高效找最后一个非空单元格的下一行,不用循环可以这么写,数据量大时更快捷:
' 找开始列第一个空白单元格(从第3行开始) StartValueCell = IIf(IsEmpty(Cells(3, 2)), 3, Cells(Rows.Count, 2).End(xlUp).Row + 1) ' 找结束列第一个空白单元格(从第3行开始) EndValueCell = IIf(IsEmpty(Cells(3, 3)), 3, Cells(Rows.Count, 3).End(xlUp).Row + 1)
内容的提问来源于stack exchange,提问作者Robert Kendall
相关产品推荐
相关产品推荐

