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