출처: 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이랑 단위가 같아서 쓰기가 편하더군요.
'Office > VBA' 카테고리의 다른 글
VBA에서 #define, #ifdef와 유사한 문장 사용 방법 (0) | 2017.08.13 |
---|---|
Application.OnTime으로 서브루틴 호출시 인수 전달 방법 (0) | 2017.08.08 |
멀티 모니터에서 VBA 문자열 찾기 다이얼로그 위치 문제 해결 (0) | 2017.08.02 |
VBA Application.OnTime x Userform (0) | 2016.12.05 |
두 Excel 파일의 VBA 코드 비교 (0) | 2016.11.18 |