印刷用ページ      送信     
クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
Visual Studio 2005
Technical Articles
VB マイグレーション Tips
プログラミング
 エラー発生時に行う例外処理の実装方法の違いについて
VB マイグレーション Tips
エラー発生時に行う例外処理の実装方法の違いについて

サンプル コードのダウンロード (vbmigtips_Error.exe, 90.7 KB)


アプリケーションでエラー (例外) が発生する場合があります。たとえば、指定したファイルが存在しないのにファイルを開く処理を実行しようとすると、図1 のようなエラーメッセージが表示されます。

 
 図1

図1 のようなエラーメッセージを表示させないためには、プロジェクト内でエラーを正しくハンドリングする必要があります。そこで今回は、Visual Basic 6.0 と Visual Basic .NET それぞれのエラー発生時のハンドリング方法を紹介します。

Visual Basic 6.0 では On Error GoTo という構文を使用します。たとえば、test.txt ファイルを開くプロジェクトを実行し、指定した test.txt ファイルが存在しなかった場合、エラーが発生します。その際に実行する例外処理の実装は以下のとおりです。

Private Sub Command1_Click()
On Error GoTo ErrorHandler
Open "C:\Foo\test.txt" For Input As #1
Close #1
Exit Sub
ErrorHandler:
MsgBox (Err.Description)
End Sub
リスト1

On Error GoTo は、エラーが発生すると指定したラベルの処理がジャンプします。上記 (リスト1) では、エラーが発生すると、「ErrorHandler:」へジャンプし処理を行います。たとえば、C ドライブの Foo フォルダに test.txt がない状態で、リスト1 のアプリケーションを実行すると、図2 のようにエラーの概要がメッセージボックスで表示されます。

 
 図2

On Error GoTo は、Visual Basic .NET でも使用することができます。しかし、Visual Basic .NET では、「構造化例外処理」という新しいエラー処理機能がサポートされました。続いては、Visual Basic .NET で Try ... Catch ステートメントを利用したエラーの例外処理方法を紹介します。Try ... Catch ステートメントを使用した例外処理の実装コードは以下のとおりです。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim fileno As Integer
fileno = FreeFile()
Try
FileOpen(fileno, "C:\Foo\test.txt", OpenMode.Input)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
リスト2

Try ブロックの処理中にエラーが発生した場合、Catch ステートメントから End Try ステートメントまでの処理が実行されます。たとえば、C ドライブの Foo フォルダに test.txt がない状態で、リスト2 のアプリケーションを実行すると、図3 のようにエラーの概要がメッセージボックスで表示されます。

 
 図3

リスト1 やリスト2 ではエラー内容が異なっても、すべて同じ処理を行います。しかし、エラー内容によって異なる処理を行いたい場合もあるでしょう。そこで、エラーによってそれぞれ異なる処理が行えるように変更します。
Visual Basic 6.0 の場合、リスト1の「ErrorHandler:」以下を下記のように変更します。

ErrorHandler:
If Err = 53 Then
MsgBox "text.txt ファイルがありません。"
ElseIf Err = 76 Then
MsgBox "C:\Foo が見つかりません。"
Else
MsgBox (Err.Description)
End If
End Sub
リスト3

リスト3 のように Visual Basic 6.0 では If 文とエラー番号を使用してエラーの種類を判別します。一方の Visual Basic .NET では If 文を使用せず、例外オブジェクトの種類を判別します。実装コードは下記のように変更します (太字がリスト2 の変更箇所です)。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim fileno As Integer
fileno = FreeFile()
Try
FileOpen(fileno, "C:\testaa.txt", OpenMode.Input)
Catch ex As System.IO.FileNotFoundException
MessageBox.Show("text.txt ファイルがありません。")
Catch ex As System.IO.DirectoryNotFoundException
MessageBox.Show("C:\Foo が見つかりません。")
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
リスト4

これにより、test.txt ファイルが存在しない場合は、「text.txt ファイルがありません。」というメッセージボックスが表示され、C:\Foo フォルダが存在しない場合は、「C:\Foo が見つかりません。」というメッセージボックスが表示されるようになります。



© 2008 Microsoft Corporation.All rights reserved. 使用条件  |  商標  |  プライバシー
Page view tracker