본문 바로가기
Office/VBA

Application.OnTime으로 서브루틴 호출시 인수 전달 방법

by belitino 2017. 8. 8.

출처: https://stackoverflow.com/questions/31439866/multiple-variable-arguments-to-application-ontime


VBA로 프로그램을 짜다보면 특정 시간에 어떤 서브루틴을 불러야 할 경우가 있는데, 서브 루틴을 호출할 때 인수를 넘겨줄 방법을 몰라서 고민하다가 구글링을 해보니 출처에 해결 방법이 나와 있네요.


다음의 간단한 방법으로 인수를 넘겨줄 수 있습니다.


Private Sub Caller()

    Dim i As Integer

    i = 2

    Application.OnTime EarliestTime:=Now + TimeValue("00:00:01"), _

        Procedure:="'Test """ & i & "'", Schedule:=True

End Sub


Public Sub Test(j As Integer)

    MsgBox ("Test: " & j)

End Sub


인수를 전달하는 방법은 '와 """를 사용하는 것입니다. 서브 루틴을 수행시켜보시면 Caller 모듈에서 1초 후에 Test 모듈을 호출하고 Test 모듈에서 j 값은 2로 제대로 찍히는 것을 보실 수 있습니다. 많은 인수를 전달하고자 할 때는 출처의 내용을 참고하시기 바랍니다. 


여기서 주의하실 점은 Application.OnTime으로 호출하는 Caller 서브루틴은 UserForm안에 있어도 되고 Private 이어도 되지만, 호출 되는 Test 함수는 반드시 Standard Module에 있어야 하고 Public으로 선언되어야 합니다.(http://belitino.tistory.com/236)