問題が発生した場合の対処 : エラー処理

更新 : 2007 年 11 月

このレッスンでは、プログラムの基本的なエラー処理コードを作成する方法について説明します。

最適にデザインされたプログラムでも、エラーが発生することがあります。コード内の欠陥で、検出して修正できるエラーもあれば、プログラムの当然の結果であるエラーもあります。たとえば、プログラムが既に使用中のファイルを開こうとしているとします。このような場合、エラーの発生が予測されますが、回避できません。プログラマは、このようなエラーを予測して、プログラムでエラーを処理できるようにする必要があります。

ランタイム エラー

プログラムの実行中に発生するエラーは、ランタイム エラーと呼ばれます。ランタイム エラーは、プログラムが本来の設計目的以外の処理を実行しようとしたときに発生します。たとえば、プログラムが数値以外の文字列を数値に変換するなど、無効な操作を実行しようとすると、ランタイム エラーが発生します

ランタイム エラーが生じると、プログラムは例外を発行します。例外は、エラーを処理するコードをプログラム内から検出することによって、そのエラーを処理します。そうしたコードが見つからない場合、プログラムは中断され、再開する必要があります。この場合、データが損失する可能性があるため、エラーの発生が予測されるすべての場所にエラー処理コードを作成することをお勧めします。

Try...Catch...Finally ブロック

Try...Catch...Finally ブロックを使用してコード内のランタイム エラーを処理できます。コードのセグメントに対して Try を実行できます。そのコードによって例外が発行された場合、Catch ブロックにジャンプし、Catch ブロック内のコードが実行されます。そのコードが完了すると、Finally ブロック内のコードが実行されます。Try...Catch...Finally ブロック全体は、End Try ステートメントによって閉じられます。次のコードは、各ブロックの使用例です。

Try
  ' Code here attempts to do something.
Catch
  ' If an error occurs, code here will run.
Finally
  ' Code in this block will always run.
End Try

まず、Try ブロック内のコードが実行されます。エラーなしで実行された場合、プログラムは Catch ブロックをスキップして、Finally ブロック内のコードを実行します。Try ブロックでエラーが発生した場合、実行は直ちに Catch ブロックにジャンプし、そのブロックのコードが実行された後、Finally ブロック内のコードが実行されます。

やってみよう

Try...Catch ブロックを使用するには

  1. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

  2. [新しいプロジェクト] ダイアログ ボックスの [テンプレート] ペインで、[Windows アプリケーション] をクリックします。

  3. [プロジェクト名] ボックスに「TryCatch」と入力し、[OK] をクリックします。

    新しい Windows フォーム プロジェクトが開きます。

  4. ツールボックス から、1 つの TextBox コントロールと 1 つの Button コントロールをフォームにドラッグします。

  5. Buttonをダブルクリックしてコード エディタを開きます。

  6. Button1_Click イベント ハンドラに次のコードを追加します。

    Try
      Dim aNumber As Double = CDbl(Textbox1.Text)
      MsgBox("You entered the number " & aNumber)
    Catch
      MsgBox("Please enter a number.")
    Finally
      MsgBox("Why not try it again?")
    End Try
    
  7. F5 キーを押してプログラムを実行します。

  8. テキスト ボックスに数値を入力し、ボタンをクリックします。入力した数値を表示するメッセージ ボックスが表示された後、再試行を勧めるメッセージが表示されます。

  9. 次に、単語など、数値以外の値をテキスト ボックスに入力して、ボタンをクリックします。今度は、プログラムがテキスト ボックス内のテキストを数値に変換しようとすると、変換できずにエラーが発生します。Try ブロック内のコードを完了せずに、Catch ブロックが実行され、数値の入力を要求するメッセージ ボックスが表示されます。その後、Finally ブロックが実行され、再試行を勧められます。

次の手順

このレッスンでは、Try...Catch...Finally ブロックを使用して基本的なエラー処理構造を作成する方法を説明しました。このレッスンで、Visual Basic 言語の概要は終了です。次の一連のレッスンでは、プログラムのユーザー インターフェイスを作成する方法について説明します。

次のレッスン : 「プログラムの外観の作成 : Windows フォームの概要

参照

処理手順

二者択一のプログラム : If...Then ステートメント

バグの理解 : 3 種類のプログラミング エラー

参照

Try...Catch...Finally ステートメント (Visual Basic)

その他の技術情報

Visual Basic での構造化例外処理