답변:
대기 방법을 사용하십시오 .
Application.Wait Now + #0:00:01#
또는 (Excel 2010 이상) :
Application.Wait Now + #12:00:01 AM#
Application.Wait(Now + #0:00:01#)
건배!
Application.Wait (Now + TimeValue("0:00:01"))
Application.wait(now + 1e-5)
, 초 동안 Application.wait(now + 0.5e-5)
0.5 초 등
이것을 모듈에 추가하십시오.
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
또는 64 비트 시스템의 경우 다음을 사용하십시오.
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
다음과 같이 매크로에서 호출하십시오.
Sub Macro1()
'
' Macro1 Macro
'
Do
Calculate
Sleep (1000) ' delay 1 second
Loop
End Sub
Sleep()
1 초 미만의 대기 시간을 지정할 수 있기 때문 입니다. Application.Wait
때로는 너무 세분화되어 있습니다.
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
사용하는 대신:
Application.Wait(Now + #0:00:01#)
나는 선호한다:
Application.Wait(Now + TimeValue("00:00:01"))
나중에 읽기가 훨씬 쉽기 때문입니다.
이것은 나를 위해 완벽하게 작동합니다. "do until"루프 앞이나 뒤에 코드를 삽입합니다. 귀하의 경우에는 do 루프 안쪽 끝에 5 줄 (time1 = & time2 = & "do until"루프)을 넣으십시오.
sub whatever()
Dim time1, time2
time1 = Now
time2 = Now + TimeValue("0:00:01")
Do Until time1 >= time2
DoEvents
time1 = Now()
Loop
End sub
Timer
때문에 아래의 유사한 솔루션보다 더 잘 작동합니다 Timer
.
kernel32.dll의 Sleep 선언은 64 비트 Excel에서 작동하지 않습니다. 이것은 좀 더 일반적입니다.
#If VBA7 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
클레 모 코드의 정리 된 버전-Access에서 작동하며 Application.Wait 기능이 없습니다.
Public Sub Pause(sngSecs As Single)
Dim sngEnd As Single
sngEnd = Timer + sngSecs
While Timer < sngEnd
DoEvents
Wend
End Sub
Public Sub TestPause()
Pause 1
MsgBox "done"
End Sub
Timer
자정 이후의 초 수를 제공 그냥 자정 전에 실행되는 경우,이 방법이 실패 (즉, 같은이 sngEnd
> = 86400)입니다. 자정 Timer
에 0으로 재설정되므로 sngEnd
영원히 남지 않습니다 .
제시된 대부분의 솔루션은 현재 초 카운트가 시작된 이후 이미 경과 된 시간 (밀리 초)을 고려하지 않는 Application.Wait를 사용하므로 최대 1 초의 본질적인 부정확성을 갖습니다 .
타이머 접근 방식이 최선의 해결책 이지만 자정에 재설정을 고려해야하므로 타이머를 사용하는 매우 정확한 절전 방법이 있습니다.
'You can use integer (1 for 1 second) or single (1.5 for 1 and a half second)
Public Sub Sleep(vSeconds As Variant)
Dim t0 As Single, t1 As Single
t0 = Timer
Do
t1 = Timer
If t1 < t0 Then t1 = t1 + 86400 'Timer overflows at midnight
DoEvents 'optional, to avoid excel freeze while sleeping
Loop Until t1 - t0 >= vSeconds
End Sub
이 기능을 사용하여 모든 수면 기능을 테스트하십시오. (디버그 직접 실행 창 열기 : CTRL + G)
Sub testSleep()
t0 = Timer
Debug.Print "Time before sleep:"; t0 'Timer format is in seconds since midnight
Sleep (1.5)
Debug.Print "Time after sleep:"; Timer
Debug.Print "Slept for:"; Timer - t0; "seconds"
End Sub
Function Delay(ByVal T As Integer)
'Function can be used to introduce a delay of up to 99 seconds
'Call Function ex: Delay 2 {introduces a 2 second delay before execution of code resumes}
strT = Mid((100 + T), 2, 2)
strSecsDelay = "00:00:" & strT
Application.Wait (Now + TimeValue(strSecsDelay))
End Function
다음은 수면의 대안입니다.
Sub TDelay(delay As Long)
Dim n As Long
For n = 1 To delay
DoEvents
Next n
End Sub
다음 코드에서는 스핀 버튼에 "글로우"효과를 깜빡이게하여 사용자가 "문제가있는"경우 해당 버튼으로 안내합니다. 루프에서 "sleep 1000"을 사용하면 눈에 띄게 깜박이지 않지만 루프는 훌륭하게 작동합니다.
Sub SpinFocus()
Dim i As Long
For i = 1 To 3 '3 blinks
Worksheets(2).Shapes("SpinGlow").ZOrder (msoBringToFront)
TDelay (10000) 'this makes the glow stay lit longer than not, looks nice.
Worksheets(2).Shapes("SpinGlow").ZOrder (msoSendBackward)
TDelay (100)
Next i
End Sub
나는 문제에 답하기 위해 이것을 만들었다.
Sub goTIMER(NumOfSeconds As Long) 'in (seconds) as: call gotimer (1) 'seconds
Application.Wait now + NumOfSeconds / 86400#
'Application.Wait (Now + TimeValue("0:00:05")) 'other
Application.EnableEvents = True 'EVENTS
End Sub
나는 보통 타이머 기능을 사용 하여 응용 프로그램을 일시 중지합니다. 이 코드를 귀하에게 삽입하십시오.
T0 = Timer
Do
Delay = Timer - T0
Loop Until Delay >= 1 'Change this value to pause time for a certain amount of seconds
Timer
자정 이후의 초 수를 제공 그냥 자정 전에 실행되는 경우,이 방법이 실패 (즉,되도록 T0
적은 자정부터 지연 시간 (초)보다). 자정에 Timer
지연 제한에 도달하기 전에 0으로 재설정됩니다. Delay
지연 제한에 도달하지 않으므로 루프가 영원히 실행됩니다.
Loop Until Delay >= 1
. 그렇지 않으면 1을 넘어서 루프를 종료하지 않을 위험이 있습니다.
대기 및 절전 기능은 Excel을 잠그고 지연이 완료 될 때까지 다른 작업을 수행 할 수 없습니다. 반면에 루프 지연은 기다릴 정확한 시간을 제공하지 않습니다.
그래서 저는이 두 가지 개념을 약간 결합하여이 해결 방법을 만들었습니다. 시간이 원하는 시간이 될 때까지 반복됩니다.
Private Sub Waste10Sec()
target = (Now + TimeValue("0:00:10"))
Do
DoEvents 'keeps excel running other stuff
Loop Until Now >= target
End Sub
지연이 필요한 곳에 Waste10Sec에 전화하면됩니다.
DoEvents
여기에서 데모 한 것처럼 추측합니다. dailydoseofexcel.com/archives/2005/06/14/stopwatch