You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA宏执行多一次循环并抛出Return without Gosub错误求助

问题分析与修复

错误原因

  1. Return without Gosub报错:你用GoSub EndTime跳转到标签执行,跑完Return会回到GoSub的下一行,但后续代码会继续往下走,再次碰到Return时没有对应的GoSub触发,所以报错。而且这段GoSub完全多余,直接执行代码就行。
  2. 结束列循环多跑一次:判断单元格非空的条件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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:25:55