Share via


方法 : エラー発生時に制御を継続する

更新 : 2007 年 11 月

構造化例外処理に対して Try...Catch...Finally ステートメント (Visual Basic) 構造を使用できます。これにより、コードの実行中に特定の例外が発生した場合に特定のステートメント ブロックを実行できます。このように例外が発生することをコードが例外をスローすると言い、スローされた例外を Catch ステートメントで処理することを例外をキャッチすると言います。

コードによって例外が発生した場合に一連のステートメントを実行するには

  • Try...Catch...Finally 構造を使用して、例外を引き起こす可能性のあるコードを囲みます。次に、例外が発生した場合に実行するコードを指定し、任意で、Try...Catch...Finally 構造から制御が移る前に実行する一連のステートメントを指定します。

    次の例では、Object 変数 givenDate で提供される値からちょうど 100 年後の日時を計算しています。

    Dim givenDate As Object
    Dim nextCentury As Date
    Try
        nextCentury = Microsoft.VisualBasic.DateAdd("yyyy", 100, givenDate)
        Catch thisExcep As System.ArgumentOutOfRangeException
        ' The resulting date/time is later than December 31, 9999.
        Catch thisExcep As System.ArgumentException
        ' At least one argument has an invalid value.
        Catch thisExcep As System.InvalidCastException
        ' The value in givenDate cannot be interpreted as a date/time.
        Catch
        ' An unforeseen exception has occurred.
        Finally
        ' This block is always run before leaving the Try structure.
    End Try
    

    最初の 3 つの Catch ブロックは、DateAdd 関数 (Visual Basic) から予測可能な例外を処理します。予期しない例外は、最後の Catch ブロックで処理できます。

    どのような場合でも、Try...Catch...Finally 構造から制御が移る前に、必ず最後に Finally ブロックで最後のコードが実行されます。Try または Catch ブロックで、オブジェクトまたはデータベース接続などのリソースを作成するまたは開く場合、必要に応じて Finally ブロックを使用してこれらを閉じたり、破棄したりできます。

    例外変数 thisExcep が、Dim などの宣言ステートメントで指定されていない場合は、 As 句を持つ Catch ステートメントが宣言として機能します。

参照

処理手順

方法 : 制御構造から制御を移す

方法 : 1 つ以上の条件に基づいて、ステートメントを実行する

方法 : 式を複数の値と比較する

概念

条件判断構造

ループ構造

その他の制御構造

入れ子になった制御構造

その他の技術情報

Visual Basic における制御フロー