VBA – Wait 함수와 Sleep 함수

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Younjung Kim

Last updated on 5월 6, 2023

이 튜토리얼에서는 VBA의 Wait 및 Sleep함수를 사용하여 코드를 일시 중지/지연하는 방법을 보여드립니다.

복잡한 계산을 수행하거나 외부 프로그램을 호출하여 실행하는 VBA 프로그램을 만들 때 외부 프로세스가 진행되는 동안 VBA 코드가 특정 시간 동안 실행을 중지해야 할 수 있습니다. VBA에는 이를 위해 사용할 수 있는 몇 가지 방법이 있습니다.

Application.Wait 메서드 사용하기

다음 단계를 실행하기 전에 매크로 실행을 일정 시간 동안 또는 지정된 시간에 도달할 때까지 일시 중지해야 하는 경우 Application.Wait 메서드를 사용할 수 있습니다. 예를 들어 웹사이트 로그인 프로세스를 자동화했는데 페이지가 로드될 때까지 몇 초간 기다렸다가 매크로를 계속 실행해야 하는 경우에 유용할 수 있습니다.

1초 대기

매크로에 아래 코드를 포함하면 매크로 실행이 약 1초 동안 일시 중지됩니다:

Application.Wait (Now + TimeValue("0:00:01"))

특정 시간까지 대기

특정 시간까지 기다려야 하는 경우도 있습니다. 아래 코드를 사용하면 오전 9시 이전에는 매크로가 실행되지 않습니다:

Application.Wait "09:00:00"

Application.Wait는 1초 미만의 지연은 사용할 수 없다는 점에 유의하세요.

Sleep 메서드 사용하기

매크로를 보다 정교하게 일시 중지하려면 Sleep 메서드를 사용할 수 있습니다.

Sleep 함수는 Windows API 함수이며 VBA의 내장 함수가 아닙니다. 특수 선언문을 사용하여 액세스할 수 있습니다.

64비트 버전의 Microsoft Office를 사용하는 경우 다음 문을 새 모듈에 삽입하거나 Sleep 함수를 사용하려는 모듈의 시작 부분(서브루틴에 직접 삽입하지 않음)에 삽입할 수 있습니다:

Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)

32비트 버전에서는 아래 코드를 사용합니다:

Public Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)

Sleep 함수를 선언한 후에는 다음과 같은 방식으로 이 함수에 액세스할 수 있습니다:

Sleep 10000

위의 코드를 사용하면 매크로가 10,000밀리초, 즉 10초 동안 일시 중지됩니다.

Do Events문을 반복문에 사용하기

Wait 및 Sleep 메서드 사용의 가장 큰 단점은 매크로가 계속 실행되기를 기다리는 동안 사용자가 Excel에서 아무 작업도 할 수 없다는 것입니다. 사용자는 Excel이 응답을 멈췄다고 생각할 수 있습니다. Ctl+Break를 사용하여 매크로를 중단할 수 있지만 이렇게 하면 일시 중지를 설정한 목적이 의미 없어집니다.

이 문제를 해결하기 위해 DoEvents라는 메서드가 포함된 루프를 사용할 수 있습니다.

Public Sub Test()
    Dim i As Long
    For i = 1 To 20000
        Range(“A1”).Value = i
        DoEvents
    Next i
End Sub

이제 Excel이 위의 매크로를 실행하는 동안 사용자는 탭을 변경하거나 셀 서식을 지정하는 등 Excel과 계속 상호 작용할 수 있습니다. 기본적으로 매크로는 계속 실행되지만 Excel 화면은 정지되지 않습니다. 비슷한 루프를 사용하여 Excel에 타이머 함수를 만들고 여기에 DoEvents 메서드를 통합하여 타이머가 실행되는 동안 화면 고정을 해제할 수 있습니다.

vba-free-addin

VBA 코드 예시 추가 기능

본 웹사이트에 있는 모든 코드 예시에 쉽게 접근해보세요.

메뉴로 이동하여 클릭만 하면 코드는 모듈에 바로 입력됩니다. .xlam 추가 기능.

(설치가 필요 없습니다!)

무료 다운로드

VBA 코드 예시로 돌아가기