2017-06-21 12 views
0

私はいくつかの点でSub Bを呼び出すことSub Aを持っている:呼び出されたサブ/ファンクションは、呼び出し元のサブ/ファンクションの実行を終了できますか?

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

Sub B() 
    ... 
End Sub 

完全に実行を終了する(いくつかの条件指定された)サブBに私が言うどのような方法がありますか? If True Then Exit Subのようなものを言うと、Sub Bは終了しますが、スレッドはSub Aに戻されます。私が欲しいのは、実行スレッドを完全に終了させる方法(可能であれば)を理解することです。

背景

Sub Bは、ユーザが適切な入力を提供する代わりに、より価値があまりにも、複雑な場合に使用される、例外が発生した後、実行を終了する一般的な方法であることが想定されますその種の例外を処理するためのコード行をたくさん書いています。

答えて

0

あなたは完全に実行されているすべてのVBAコードを停止するEndを使用することができます例えば:

Sub B 
    If disastrousCalamity Then End 
Exit Sub 

私がいると思うことができる唯一の他の方法私が使用する2:

1)あなたは、例えば公共のブール値を持っていますCancelBoolを入力し、Bで災害が発生した場合はTrueに設定し、Sub Aのチョークポイントでこれをチェックしてください...または...

2)SubBは実際にブール値を返す関数に変換されますIf B = True Then Exit SubとAも停止する?!:そのように、あなたがAからBを呼び出すときに、このようにそれを使用することができますので、

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

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を超えるこのソリューションを好みます。

関連する問題