运行时错误 3 不使用 GoSub 返回
不正确的代码
Sub DoSomething()
GoSub DoThis
DoThis:
Debug.Print "Hi!"
Return
End Sub
为什么这不起作用?
执行进入 DoSomething
程序,跳转到 DoThis
标签,打印“嗨!” 到调试输出,在 GoSub
调用后立即返回指令,打印“嗨!” 再次,然后遇到一个 Return
声明,但现在无处可回,因为我们没有带到 GoSub
声明。
正确的代码
Sub DoSomething()
GoSub DoThis
Exit Sub
DoThis:
Debug.Print "Hi!"
Return
End Sub
为什么这样做?
通过在 DoThis
线标签之前引入 Exit Sub
指令,我们将 DoThis
子程序与程序体的其余部分隔离开来 - 执行 DoThis
子程序的唯一方法是通过 GoSub
跳转。
其他说明
GoSub
/ Return
已被弃用,应该避免使用实际的过程调用。除了错误处理程序之外,过程不应包含子例程。
这与运行时错误'20’ 非常相似 :恢复没有错误 ; 在这两种情况下,解决方案是确保正常执行路径不能在没有显式跳转的情况下进入子程序(由线标签标识)(假设 On Error GoTo
被认为是显式跳转 )。