例外処理

VB6では例外処理try-catch-finallyをサポートしてないんで、
擬似的にエミュレートしてみました。


・Form1.frm

Option Explicit

' フォームロードイベントハンドラ
Private Sub Form_Load()

' try {
On Error GoTo Catch:

    Dim msg As String
    msg = ""
    
    Call PrintMessage(msg)

    GoTo Finally:
' }
' catch(...) {
Catch:
    Debug.Print "Raise Error !!"
    Debug.Print "Number      : " & Err.Number
    Debug.Print "Description : " & Err.Description
    Debug.Print "Source      : " & Err.Source
    
    ' エラー番号ごとの処理
    Select Case Err.Number
        Case ApplicationErrorCode.InvalidArgument
            ' TODO:
        Case Else
            ' TODO:
    End Select

' }
' finally {
Finally:

    

' }

End Sub


' メッセージを出力するメソッド
Public Sub PrintMessage(ByVal msg As String)

    ' パラメータチェック
    If msg = vbNullString Then
        Err.Clear
        Call Err.Raise(ApplicationErrorCode.InvalidArgument, "Project1.Form1", "引数が不正です。")
    End If
    
    Debug.Print msg

End Sub


・modErrorContants.bas

Option Explicit

Private Const ERROR_CODE_BASE = vbObjectError + 512

Public Enum ApplicationErrorCode
    ZeroDivid = ERROR_CODE_BASE
    InvalidOperation = ERROR_CODE_BASE + 1
    InvalidArgument = ERROR_CODE_BASE + 2
    ' ...
    ' ... いろいろエラーコードを以下に定義
    ' ...
End Enum

未だに会社でVB6で開発しています。。。orz
でも、意外と楽しかったりする。w