質問
以下のようなコードを実行した時に、VBEのオプションで設定が「クラスモジュールで中断」になっていると、クラスモジュール中のErr.Raiseで中断してしまいます。
標準は「エラー処理対象外のエラーで中断」なのでユーザー環境では問題ないのですが、開発環境だと上記設定にしておかないとデバッグが大変です。
このようなRaiseを使った書き方は不適切なのでしょうか。
VBA
1'Module1 2 Sub main() 3 Dim cls As Class1 4 Set cls = New Class1 5 Dim i As Long 6 7 Debug.Print "---開始---" 8 For i = 1 To 5 9 On Error GoTo ErrHandle 10 Debug.Print cls.CheckNum(i) 11 GoTo NoErr 12ErrHandle: 13 Debug.Print "エラー:" & Err.Description 14 Resume Next 15NoErr: 16 '処理続行 17 Next 18 Debug.Print "---終了---" 19End Sub
VBA
1'Class1 2 Public Function CheckNum(i As Long) As Long 3 If i Mod 2 = 0 Then 4 Err.Raise 9999, "CheckNumのエラー", "偶数は認めません。" 5 Else 6 CheckNum = i 7 End If 8End Function
代替案
クラス中で発生したエラーをクラス変数に格納しておいて見かけ上は正常に完了させた上で、後からチェックするような案を考えてみたのですが、これは呼び出し元がチェックを怠る可能性があるため不適切だと思います。
どのような書き方が適切なのでしょうか。
VBA
1'Module1 2Sub main2() 3 Dim cls As Class1 4 Set cls = New Class1 5 Dim i As Long 6 7 Debug.Print "---開始---" 8 For i = 1 To 5 9 Dim V As Variant 10 V = cls.CheckNum2(i) 11 If cls.Result = "" Then 12 Debug.Print V 13 Else 14 Debug.Print "エラー:" & Err.Description 15 End If 16 '処理続行 17 Next 18 Debug.Print "---終了---" 19End Sub
VBA
1'Class1 2Public Result As String 3 4Public Function CheckNum2(i As Long) As Long 5 If i Mod 2 = 0 Then 6 Result = "偶数は認めません。" 7 Else 8 Result = "" 9 CheckNum2 = i 10 End If 11End Function

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/11/30 10:46