2017-06-21 32 views
0

我有一個Sub A,在某些時候調用Sub B一個被調用的子/函數可以結束調用者子/函數的執行嗎?

Sub A() 
    ... 
    B 
    ... 
End Sub 

Sub B() 
    ... 
End Sub 

有什麼辦法我給小組B(給予一定的條件)說完全終止執行? 如果我想說的是類似If True Then Exit SubSub B將終止,但會通過線程回Sub A。相反,我想知道如何(如果可能)完全結束執行線程。

背景

Sub B應該是會引發異常,然後終止執行一般方法中,將被用於所有的過於複雜的情況下,它更值得用戶提供適當的輸入,而不是編寫大量的代碼行來處理這種異常。

回答

0

你可以使用End完全停止所有正在運行的VBA代碼,例如: -

Sub B 
    If disastrousCalamity Then End 
Exit Sub 

我能想到的唯一的其他方式兩塊我使用:

1)你有公佈爾例如CancelBool並在B中發生災難時將其設置爲True,然後在Sub A中的阻塞點處檢查並退出A ... OR ...

2)Sub B實際上轉換爲一個Function,該Function返回一個布爾值所以

Function B() As Boolean 
If disaster then 
    B = True 
Else 
    B = False 
End If 
End B 

這樣,當你從一個叫B您可以使用它像這樣:If B = True Then Exit Sub和A也將停止?

0
Global SubBReturnedError As Boolean 

Sub A 
    ' Some code 
    Call B 
    If SubBReturnedError = True Then End Sub 
    ' Some code that may or may not get executed 
End Sub 

Sub B 
    ' Some code 
    ' Fudge happened 
    If someError = True Then SubBReturnedError = True 
    If SubBReturnedError = True Then End Sub 
    ' Some code that won't get executed 
End Sub 

個人而言,我贊成這種解決方案在剛剛End -ing這一切,僅僅是因爲它讓你與你的時候幾乎不可避免地回到增加或細化的代碼更容易訪問的選擇。

相關問題