Chris는 사용자에게 일련의 항목을 표시하는 Excel 매크로를 개발하고 있습니다. 그는 자신이 표시하는 각 정보 사이에 1 초의 지연을 매크로에 도입하고 싶어하며 이러한 지연을 쉽게 추가 할 수있는 방법이 있는지 궁금합니다.

매크로에 지연을 도입 할 수있는 몇 가지 방법이 있습니다. 전통적인 방법은 Application 개체와 함께 사용되는 Wait 메서드를 사용하는 것입니다. 이를 사용하여 다음과 같은 방식으로 1 초 지연을 도입합니다.

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

Wait 메서드에 필요한 매개 변수는 매크로 실행을 다시 시작하려는 시간입니다. 즉, “대기”시간입니다. 그렇기 때문에 위의 예에서는 1 초씩 증가 된 현재 시간 (Now 함수에서 가져온)을 사용합니다.

어떤 이유로 든 Wait 메서드를 사용하지 않으려면 루프를 사용하여 시간을 입찰 할 수도 있습니다.

Dim WaitTime As Date

WaitTime = Now() + TimeValue("0:00:01")

Do While Now < WaitTime Loop

이 접근 방식의 변형은 자정 이후의 초 수를 반환하는 Timer 함수에 의존합니다.

Dim Endpoint as Single

Endpoint = Timer + 1 Do While Timer < Endpoint Loop

이러한 방식으로 루프를 사용할 때 1 초만 지연하는 경우 큰 문제가되지 않을 것입니다. 더 긴 시간 동안 지연해야하는 경우 DoEvents 함수를 루프에 배치하는 것이 좋습니다.

Dim Endpoint as Single

Endpoint = Timer + 1 Do While Timer < Endpoint     DoEvents Loop

이유는 간단합니다. 그렇지 않으면 Excel이 루프에있는 동안 다른 이벤트에 응답하지 않습니다. 이로 인해 기다리는 동안 시스템이 멈췄거나 중단 된 것처럼 보일 수 있습니다.

지연에 대해 더 세분화해야하는 경우 (밀리 초 범위까지) Windows API의 일부인 Sleep 기능을 사용할 수 있습니다. (VBA의 일부가 아닙니다.)이를 사용하려면 모듈 시작 부분, 선언 영역의 모든 프로 시저 앞에 선언을 포함해야합니다.

#If VBA7 And Win64 Then     Public Declare PtrSafe Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)

#Else     Public Declare Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)

#End If

그런 다음 매크로 내에서 다음과 같은 방식으로 Sleep 기능을 사용할 수 있습니다.

Sleep(1000)

이렇게하면 1000 밀리 초 (1 초) 동안 시스템이 일시 중지됩니다.

_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.

이 팁 (5134)은 Microsoft Excel 2007, 2010, 2013 및 2016에 적용됩니다.