본문 바로가기
Office/VBA

VBA를 이용한 특정 시간 대기 방법 3가지

by belitino 2017. 8. 11.

출처: https://stackoverflow.com/questions/6960434/timing-delays-in-vba

http://analystcave.com/vba-sleep-vs-wait/

 

VBA에서 프로그래밍을 하다가 보면 특정 시간을 기다려야 하는 경우가 발생합니다. 이런 경우에 VBA에서는 3가지 방법을 제공합니다.

 

1.     Sleep

대기 시간을 밀리초 단위로 제어할 수 있어서 좋으나, Sleep 하는 동안 이벤트 처리를 못해서 Sleep이 길어지면 이벤트를 날리는 경우가 발생합니다.

 

2.     Application.Wait

이 방법은 이벤트 처리는 가능하나 대기 시간이 초 단위여서 밀리 초 단위의 세밀한 조작이 필요한 경우에는 사용할 수 없습니다.

 

3.     DoEvents

DoEvents를 사용하는 방법은 Sleep Wait의 단점들을 보완한 방법이라고 하는데요 http://analystcave.com/vba-sleep-vs-wait/ 나온 설명만으로는 이해하기 어려웠는데, https://stackoverflow.com/questions/6960434/timing-delays-in-vba 나온 예제 코드를 보니 쉽게 적용이 가능했습니다.

 

해당 코드는 다음과 같습니다.

Main Routine

Call WaitFor(.005)

Sub WaitFor(NumOfSeconds As Single)

    Dim SngSec as Single

    SngSec=Timer + NumOfSeconds

Do while timer < sngsec

        DoEvents

   Loop

End sub

 

WaitFor의 인수를 1이하로 주면 밀리초 단위로 대기가 가능합니다. 저는 그냥 밀리초 단위로 인수를 주고 WaitFor 서브루틴 안에서 1,000으로 나눠쓰는게 Sleep이랑 단위가 같아서 쓰기가 편하더군요.