エクセルVBAでプログラムのエラーを回避する
sampleプロシージャのSubステートメントに引数は設定されていません。最初にDimステートメントで 変数i に整数型(Integer)を宣言しています。 次に On Errorステートメント の行ラベルに「 errorhndler 」を設定しています。これによりエラーが発生した場合は、後に記述してある「 errorhndler: 」に移動しそれ以降の処理を実行します。 On Errorステートメント 以降の処理では 変数i 」に文字列の「 VBA 」が格納されていますが、 変数i には整数しか格納できませんので、この時点でエラーが発生します。エラーが発生すると「 errorhndler: 」に移動しますので、「 MsgBox "変数の値が間違っています。" 」が処理されます。最後はEndステートメントを利用してsampleプロシージャを終了させます。
次に 変数i に整数値を設定した場合は、以下のように正常な処理の「 MsgBox "変数iは" & i & "です。" 」が処理されますが、更にそれ以降の「 MsgBox "変数の値が間違っています。" 」も処理されてしまいます。 On Errorステートメント はあくまでエラーが発生した場合に指定した位置へ移動するだけですので、それ以降の処理は正常な処理でも実行されてしまいます。
Sub sample() Dim i As Integer On Error GoTo errorhndler i = 5 MsgBox "変数iは" & i & "です。" errorhndler: MsgBox "変数の値が間違っています。" End Sub正常な処理とエラー処理を明確に分けたい場合は、正常な処理の最後にExitステートメントを利用して処理を終了させるようにしましょう。以下の事例を確認すると MsgBox "変数iは" & i & "です。" 」の後に「 Exit Sub 」により処理が終了します。
Sub sample() Dim i As Integer On Error GoTo errorhndler i = 5 MsgBox "変数iは" & i & "です。" Exit Sub errorhndler: MsgBox "変数の値が間違っています。" End Subエラー処理ルーチンは通常、プロシージャの最後に記述され On Errorステートメント でエラー処理ルーチンに移動しますが、エラーが発生せずに正常に処理が実行されてもエラー処理ルーチンは実行されます。それを回避するために、エラー処理ルーチンの前にプロシージャを終了させる Exit Subステートメント を記述する必要があります。
エラー時にエラー内容を表示させるサンプルコード Sub sample() Dim i As Integer On Error GoTo errorhndler i = "VBA" MsgBox "変数iは" & i & "です。" errorhndler: MsgBox "エラー内容:" & Err.Description End Sub 実行結果 解説こちらは、先ほどと同じ内容で 変数i が整数型(Integer)に対して文字列を格納しようとしたため、エラー処理が実行されます。その際に MsgBox関数 にErrorオブジェクトのDescriptionプロパティを設定しています。こちらを設定することで エラーに関連する説明の文字列 を表示させます。
今回は、変数に型の違うデータを格納したエラーですので、「 型が一致しません。 」の文字列が返されます。
まとめ今回は On Errorステートメント を利用して、プログラムのエラーを回避する方法について解説しました。次回は、エクセルVBAでプログラムのエラーを無視する方法について解説します。
エクセルVBAのエラー処理一覧- プログラムのエラーを回避する
- プログラムのエラーを無視する
- プログラムのエラー処理を無効にする
近田 伸矢, 植木 悠二, 上田 寛
よく読まれているVBAのIE(InternetExplorer)操作関連記事- 指定したURLをIE(InternetExplorer)で起動する
- InternetExplorer制御の準備(ライブラリ追加)
- HTMLドキュメント(全ての要素)を取得する
- HTMLDocumentのallオブジェクト
- webページのBasic認証自動ログイン「ieBasic」
エクセルVBAのIE(InternetExplorer)制御サイトについて
Excelマクロ/VBA(Visual Basic for Applications)を利用したIE(InternetExplorer)の制御についてまとめています。ExcelのVBAでIE(InternetExplorer)を操作することで自動ログインや自動データ入手などができますので、非常に便利なプログラムです。
Copyright(C)2014 エクセルVBAのIE(InternetExplorer)制御 All Rights Reserved.