2017-02-08 13 views
2

アクセスでは、VBAを使用して、Application.Runを使用してエラーをトラップします。残念ながら、Application.Runはエラートラッピングをハイジャックしているようです。これを修正する方法はありますか?Application.Run with Error Trapping

On Error Resume Next 
Application.Run ... 

私はエラー再開次のオンまたはエラー後藤ErrCatchで指定しても、エラーにApplication.Runを乗り越えることはありません。私のエラートラップ設定は無視されます。あなたが名前によって動的に物事を呼び出すことができるようにする必要がある場合は、あなたが探検でき

Sub Foo() 
    'Application.Run "SomeProc" 
    SomeProc 
End Sub 

:あなたが呼び出している手順では、VBAプロジェクト内にある場合

+2

を使用する以外の選択肢はありません。外部呼び出しと同じこと。あなたは* *のためにそれを使っていますか?回避策がある可能性があります。 – Comintern

+0

実行可能なサブリストのリストが比較的小さい場合は、さまざまなケースでサブタイプを直接呼び出す場合の選択ケースを使用することができます –

+0

ありがとうございます。それは、選択されたケースの構築よりも柔軟性がある必要があります。 – someprogrammer

答えて

5

は、その後、あなただけと直接プロシージャを呼び出すことができますクラスを使用してCallByName

'In a standard module 
Sub Foo() 
    Dim o as New ProcRunner 
    CallByName o, "SomeProc", VbMethod, args 
End Sub 

'In a class module called ProcRunner 
Sub SomeProc() 
    DoSomethingHere 
    'Or, do something in a standard module 
    Module1.SomeOtherProc 
End Sub 

それとも、あなたはの線に沿って、独自のダイナミックハンドラを記述することができます。

Sub AppRun(ProcName As String, ParamArray Args) 
    Select Case ProcName 
    Case "SomeProc" 
     SomeProc 
    Case "SomeFunc" 
     SomeFunc 
    End Select 
End Sub 

別のVBAプロジェクトでプロシージャを呼び出す場合は、VBAホストに応じて、そのプロジェクトへの参照を追加する必要があります。しかし

、あなたがApplication.Runを使用している場合は、DLLまたはXLLで登録された関数を呼び出しているので、あなたはApplication.Run`は基本的には `ためだApplication.Run

+0

CallByNameは面白そうですが、タイプとしてProcRunnerを使用することはできません。それについての参考情報が何であるか考えてみませんか? – someprogrammer

+0

@someprogrammerあなた自身のクラスを追加する必要があります。これは 'ProcRunner'と呼ばれ、その答えの例が私の答えに追加されています。 – ThunderFrame