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

Exit Sub在GoSub与Select Case中的放置位置及代码执行异常问题

问题分析与解决

你的代码问题出在GoSub/Return的错误使用,以及标签位置逻辑混乱:

  • LowHours:标签放在Do Loop循环内部,每次循环执行完A = A + 1后,会自动往下走到这个标签代码块,哪怕没触发GoSub调用,这时执行Return就会报“Return without GoSub”错误。
  • 当触发GoSub后,执行完Return会回到GoSub LowHours的下一行(也就是A = A + 1),循环继续后又会走到标签代码块,导致逻辑混乱、代码重复运行。

修复方案1:直接把逻辑写在Case分支(最简洁)

摒弃容易出错的GoSub,把LowHours的逻辑直接放到Case分支里,同时去掉不必要的Select操作,直接操作单元格对象:

Do While Cells(A, 1) > 0
    HoursWorked = Cells(A, 9)
        
    Select Case HoursWorked
        Case Is < 120
            With Cells(A, 11).Interior
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
                .ThemeColor = xlThemeColorAccent6
                .TintAndShade = 0.799981688894314
                .PatternTintAndShade = 0
            End With
            Cells(A, 11).Value = "Low Risk"
    End Select
    A = A + 1
Loop
End Sub

修复方案2:封装成独立子过程(适合复用)

如果这段标记逻辑需要多次使用,可以单独写成子过程,再在Case里调用:

Sub YourMainSub()
    Dim A As Long, HoursWorked As Double
    ' 记得给A赋初始值,比如A = 2(假设数据从第二行开始)
    
    Do While Cells(A, 1) > 0
        HoursWorked = Cells(A, 9)
            
        Select Case HoursWorked
            Case Is < 120
                MarkLowRisk A ' 调用独立子过程
        End Select
        A = A + 1
    Loop
End Sub

' 独立子过程:处理低工时标记
Sub MarkLowRisk(rowNum As Long)
    With Cells(rowNum, 11).Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent6
        .TintAndShade = 0.799981688894314
        .PatternTintAndShade = 0
    End With
    Cells(rowNum, 11).Value = "Low Risk"
End Sub

注意:原代码未给变量A设置初始值,运行时会出错,记得在循环前给A指定起始行号(比如A = 2)。

内容的提问来源于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.13 06:29:56