エラー
変数、制御構造が使えるようになると組み合わせることで
いろんなプログラムを作れるようになります。
それに伴ってエラー発生が多くなります。
そして、そのエラーにはいくつか種類があります。
種類 |
内容 |
コンパイルエラー |
プログラムの文法が間違っているときでるエラー |
実行時エラー |
プログラムを実行したとき実行不可能な演算(0で割るなどできない計算)や処理を行ったときでるエラー |
論理エラー |
プログラムが意図したとおりに動かない |
コンパイルエラー
Sub test_14()
'エラーの勉強中
Dim i As Integer
i == 1
End Sub
i == 1 という間違った式を書いたとき
コンパイルエラーのエラーメッセージが表示されます。
(自動構文チェックがオンのとき表示されます。)
2004年8月
エラー その2
実行時エラー
Sub test_14()
'エラーの勉強中
Dim i As Integer
i = 5 / 0
End Sub
5 を 0 で割るという式。
文法は間違ってないのでコンパイルエラーはでません。
でも実行すると、エラーメッセージが表示されます。
実行時エラーにはエラー番号があります。
主なエラー番号とエラー内容。
エラー番号 |
内容 |
6 |
オーバーフローしました。 |
7 |
メモリーが足りません。 |
11 |
0で除算しました。 |
35 |
Sub または Function が定義されていません。 |
94 |
Null の使い方が不正です。 |
321 |
不正なファイル形式です。 |
論理エラー
この場合、エラーメッセージはでません。
どこでエラーしたのか自分で見つけなければなりません。
エラーの中でこれが一番厄介。
2004年8月
エラー処理
エラーの発生を予測して、エラーが発生したときの処理を記述したプログラムを作ります。
これを「エラートラップ」といいます。
エラーが発生したとき行う処理を「エラー処理ルーチン」といいます。
Sub プロシージャ()
On Error GoTo 行ラベル
通常処理
Exit Sub
行ラベル:
エラーが発生したときの処理
End Sub
On Error GoTo 行ラベル は、
エラーがでたら"行ラベル"へ行けという処理です。
0 で割るという実行時エラーのあるプログラムを使ってみると
Sub test_15()
'エラー処理の勉強中
Dim x As Integer
Dim strX As String
On Error GoTo errMsg
x = 5 / 0
strX = CStr(x)
MsgBox ("x = " + strX + "です")
Exit Sub
errMsg:
MsgBox ("エラーがあったので処理を終了したよ")
End Sub
実行時エラーメッセージは出ずにこういう結果になります。
x = 5 / 1 にするとエラーがないので
2004年8月