2017-02-08 1 views
2

VBA를 사용하여 Access에서 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

, 당신은 직접 프로 시저를 호출 할 수 있습니다

Sub AppRun(ProcName As String, ParamArray Args) 
    Select Case ProcName 
    Case "SomeProc" 
     SomeProc 
    Case "SomeFunc" 
     SomeFunc 
    End Select 
End Sub 
,536 :의 라인을 따라,

'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 

또는, 당신은 당신의 자신의 동적 핸들러를 작성할 수 클래스와 CallByName를 사용하여

다른 VBA 프로젝트에서 프로 시저를 호출하는 경우 VBA 호스트에 따라 해당 프로젝트에 대한 참조를 추가해야 할 수 있습니다. 당신은 DLL 또는 XLL에 의해 등록 된 함수를 호출하고 있기 때문에 당신이 Application.Run를 사용하는 경우 Application.Run`은 기본적으로`때문에

그러나, 당신은의 Application.Run

+0

CallByName이 재미있어 보이지만 유형으로 ProcRunner를 사용할 수 없습니다. 그게 무슨 참조입니까? – someprogrammer

+0

@someprogrammer 당신은'ProcRunner'라고 불리는 자신 만의 클래스를 추가해야 할 것입니다.이 예제는 제 답변에 추가되었습니다. – ThunderFrame