2011-02-02 4 views
4

Excel 2003에서 작업 및 유사한 항목을 추적하는 캘린더를 만들었습니다. 내가 할 수있게하려면 VBA를 통해 타이머를 설정해야합니다. 이런 식으로 뭔가 :Excel VBA의 시간 초과 알림

run_in_x_secs (timetowait, function to exec) 

는 엑셀 VBA에서 그렇게 할 수있는 방법이 있나요, 아니면 시도하고 명령 줄을 통해 실행하고 VBA에서 그것을 실행하기 위해 알람을 찾아야한다.

어떻게 할 수 있습니까?

+0

http://visualbasic.about.com/od/learnvba/a/vbatiming1.htm는 –

답변

3

이 트릭해야한다 : 당신이 OnTime와 조금 조심해야 않지만 장기간 대기로 설정 될거야 특히,

Public Sub RunSubInXSeconds(secondsToWait As Long, nameOfFunction As String) 
    Application.OnTime Now + secondsToWait/(24# * 60# * 60#), nameOfFunction 
End Sub 

을 ... 예 : 타이머가 만료되고 Sub가 실행되기 전에 통합 문서를 닫으면 통합 문서를 열어 결국 실행할 수 있습니다. 당신이 그것을 기대하지 않으면 혼란스러워!

+0

이것은 Excel 응용 프로그램이 여전히 실행 중일 때만 발생합니다 ... 맞습니까? – froeschli

+0

OnTime을 예약 한 다음 통합 문서를 닫을 때 콜백을 실행하기 전에 ** 응용 프로그램을 열어두면이 문제가 발생합니다. Excel을 해킹하여 파일을 다시 열 수있는 흥미로운 방법입니다. –

+0

위대한 사이먼. 그것이 바람직한 행동입니다. 내 사용자는 파일을 Excel로 알지도 못하며, 내 버튼 만 사용합니다. (그리고 내 닫기 버튼은 응용 프로그램이 아니라 통합 문서를 닫습니다) –

3
Public Sub tt() 

timerset = TimeValue("01:00:00") 'the time you want 
Application.OnTime timerset, "myfun" 

End Sub 

Sub myfun() 
'do whatever you want 
End Sub 
+0

당신은 위대한 너무 (곧 나는 그것이 절대 시간 것으로 나타났습니다로 작동). Thnx –

+0

@Diego 죄송합니다. 언급하지 않았습니다. 보아예요! –

2

이 더 많은 옵션 :

'Option 1 
Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long) 

Sub Sleep() 
Sleep 1000 'whait 1 second 
End Sub 

'Option 2 
Sub MyWaitMacro() 
    newHour = Hour(Now()) 
    newMinute = Minute(Now()) 
    newSecond = Second(Now()) + 3 
    waitTime = TimeSerial(newHour, newMinute, newSecond) 
    Application.Wait waitTime 
End Sub