VBA vol.1 ~ エラー処理の考察1
EXCEL VBAを少し研究してみることにしてみました。
で、手始め?に「エラー処理」のやり方を考えてみることに。
まず、グローバル変数で下記の2つをを宣言して、
どこのプロシージャーでも利用できるようにしておきます。
Public ErrorRaised As Boolean
Public ErrorMessage As String
この変数の使い方はエラーが発生したプロシージャーで出力したい内容を設定できるようにするために、そのプロシージャーでメッセージ(ErrorMessage)を設定して、以降はメッセージを設定しないために、フラグ(ErrorRaised)をたてておくことにします
A2セルに1~3を設定して、サブプロシージャーのどこでエラーを発生させるかをきめます。ボタンを押して、エラーが返ってくることを確認しています。
エラー処理はもっと複雑で考えなくてはいけないことも多いでしょうが、まず、エラーが発生した箇所と原因を呼び出し元のプロシージャーに戻してメッセージ出力するにはこれでも大丈夫でしょうか。何かもっといい方法がありますでしょうか。
Option Explicit
Private Sub CommandButton1_Click()
On Error GoTo ErrorHandle
ErrorRaised = False
ErrorMessage = ""
Call a1(Range("A2").Value)
On Error GoTo 0
Exit Sub
ErrorHandle:
MsgBox "エラーが発生しました" & vbNewLine & _
Err.Number & ":" & Err.Description & vbNewLine & _
ErrorMessage
End Sub
Sub a1(num As Long)
On Error GoTo ErrorHandle
If num = 1 Then
Err.Raise 11
End If
Call a2(num)
On Error GoTo 0
Exit Sub
ErrorHandle:
If Not ErrorRaised Then
ErrorRaised = True
ErrorMessage = "a1/num=" & CStr(num)
End If
Err.Raise Err.Number, , Err.Description
End Sub
Sub a2(num As Long)
On Error GoTo ErrorHandle
If num = 2 Then
Err.Raise 12
End If
On Error GoTo 0
Call a3(num)
Exit Sub
ErrorHandle:
If Not ErrorRaised Then
ErrorRaised = True
ErrorMessage = "a2/num=" & CStr(num)
End If
Err.Raise Err.Number, , Err.Description
End Sub
Sub a3(num As Long)
On Error GoTo ErrorHandle
If num = 3 Then
Err.Raise 1001, , "ここでエラーが発生"
End If
On Error GoTo 0
Exit Sub
ErrorHandle:
If Not ErrorRaised Then
ErrorRaised = True
ErrorMessage = "a3/num=" & CStr(num)
End If
Err.Raise Err.Number, , Err.Description
End Sub
| 固定リンク
「VBA」カテゴリの記事
- VBA vol.1 ~ エラー処理の考察1(2009.02.11)

コメント
記事とは関係がありませんが・・・
来月4月1日に転勤決まりました。
南紀勝浦(和歌山)の調理長になります。
投稿: HITOTSUYA | 2009年3月 1日 (日) 23時24分