« Oracle 10g express edition をインストール | トップページ | Debianを本気で使ってみることに (VirtualBox上) »

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

|

« Oracle 10g express edition をインストール | トップページ | Debianを本気で使ってみることに (VirtualBox上) »

VBA」カテゴリの記事

コメント

記事とは関係がありませんが・・・
来月4月1日に転勤決まりました。
南紀勝浦(和歌山)の調理長になります。

投稿: HITOTSUYA | 2009年3月 1日 (日) 23時24分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/504249/44029143

この記事へのトラックバック一覧です: VBA vol.1 ~ エラー処理の考察1:

« Oracle 10g express edition をインストール | トップページ | Debianを本気で使ってみることに (VirtualBox上) »