執行時錯誤 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 被認為是顯式跳轉 )。