VB6(SP6),WinXP
はじめまして。
下に記しましたテストコードでTestA,TestBの動きを比較したところ、
・TestAはイミディエイトウィンドウに出力
・TestBは実行時エラーメッセージボックス出現
という結果になってしまいました。
TestBのケースで、何とかフォーム側でエラーをキャッチしたいのですが、
どのようにするのかを教えていただけないでしょうか。
現状では、
Functionの戻り値でErr.Number、クラスのメンバでErr.Descriptionを渡す
といった方法くらいしか思いつきません。
ちなみに
同様のテストコードをExcel2007のVBAで試すと
どちらもイミディエイトウィンドウに出力されました。
以上、どうぞよろしくお願いします。
以下はテストコードです。
------------------------------------------------------------------
'フォーム:Form1.frm
Option Explicit
Private Sub Command1_Click()
Dim cTestA As TestA
Dim cTestB As ITest
Set cTestA = New TestA
Set cTestB = New TestB
On Error GoTo Finally
'ここのコメントを切り替えて動きを比較
Call cTestA.TestExecute
'Call cTestB.TestExecute
Finally:
Set cTestA = Nothing
Set cTestB = Nothing
If Not Err.Number = 0 Then
Debug.Print Err.Number, Err.Source, Err.Description
End If
End Sub
------------------------------------------------------------------
'標準モジュール:Common.bas
Option Explicit
Public Sub ThrowException()
If Not Err.Number = 0 Then
Call Err.Raise(Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext)
End If
End Sub
------------------------------------------------------------------
'インターフェースクラス:ITest.cls
Option Explicit
Public Function TestExecute() As Boolean
End Function
------------------------------------------------------------------
'クラス:TestA.cls
Option Explicit
Friend Function TestExecute() As Boolean
On Error GoTo Finally
Call Err.Raise(5000, "TestA", "TestAのエラー")
Finally:
Call ThrowException
End Function
------------------------------------------------------------------
'クラス:TestB.cls
Option Explicit
Implements ITest
Private Function ITest_TestExecute() As Boolean
On Error GoTo Finally
Call Err.Raise(5000, "TestB", "TestBのエラー")
Finally:
Call ThrowException
End Function
------------------------------------------------------------------
コードエディタを右クリックして、[設定/解除(T)]から
エラー中断モードを切り替えておきましょう。
この設定は、VB6メニューの[ツール(T)]-[オプション(O)...]から
オプションダイアログとを開き、その全般タブからも設定できます。
> 同様のテストコードをExcel2007のVBAで試すと
> どちらもイミディエイトウィンドウに出力されました。
VBA の場合も同様に、オプションダイアログの[全般]タブで切り替えられます。
VB6 の場合と違って、コードエディタの右クリックメニューにはありませんけれどね。
> コードエディタを右クリックして、[設定/解除(T)]から
> エラー中断モードを切り替えておきましょう。
早速中断モードを切り替えたところ成功しました!
お忙しい中教えていただきまして、
ありがとうございました。
今更ですが、テストコードが動作比較する上では不適切でした。
Friend→Public
試行錯誤した名残です。申し訳ありません。