ホーム > プログラミング入門 > Lesson12: エラー

エラー
エラー エラー
変数、制御構造が使えるようになると組み合わせることで
いろんなプログラムを作れるようになります。
それに伴ってエラー発生が多くなります。
そして、そのエラーにはいくつか種類があります。
種類 内容
コンパイルエラー プログラムの文法が間違っているときでるエラー
実行時エラー プログラムを実行したとき実行不可能な演算(0で割るなどできない計算)や処理を行ったときでるエラー
論理エラー プログラムが意図したとおりに動かない

コンパイルエラー
Sub test_14()
  
  'エラーの勉強中
  
  Dim i As Integer
  
  i == 1
  
End Sub

i == 1 という間違った式を書いたとき
コンパイルエラーのエラーメッセージが表示されます。
コンパイルエラー
(自動構文チェックがオンのとき表示されます。)
2004年8月
エラー その2 エラー その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月