2014-03-31 6 views
8

매 10 분마다 매크로를 실행해야합니다.vba를 매 10 분마다 실행하는 방법은 무엇입니까?

이것은 10 분

sub my_Procedure() 
msgbox "hello world" 
end sub 

sub test() 
Application.OnTime Now + TimeValue("00:00:10"), "my_Procedure" 
end sub 

에서 작업 할 수 있습니다 그러나 이것은 한 번만 사용할 수 있습니다. 10 분마다 매크로를 실행하려면 어떻게해야합니까?

당신은이 패턴을 사용한다
+0

'msgbox의 바로 뒤에'전화 테스트 '를 추가하십시오. hello world " –

+0

감사합니다. 전에 이걸 봤어. 하지만 나는 그 논리를 이해하지 못합니다. 그것은 작동합니다! 하지만 왜? 나는 어떤 루프 루핑 로직도 볼 수 없다. – Buras

+0

간단하다 :'test' 서브를 실행한다. 타이머를 시작하고 10 분 후에'my_Procedure'를 실행하고, 다시'test'를 실행합니다. 'Test'는 다시 타이머를 시작합니다. :) –

답변

22

:

Sub my_Procedure() 
    MsgBox "hello world"   
    Call test ' for starting timer again 
End Sub 

Sub test() 
    Application.OnTime Now + TimeValue("00:10:00"), "my_Procedure" 
End Sub 
+0

my_Procedure 매크로를 실행하면 잘 작동합니다. 그러나 10 분 후에 my_Procedure를 실행할 수 없으며 매크로를 사용할 수 없다는 오류가 발생합니다. – RockScience

+0

@RockScience,'Sub my_Procedure()'가 정의되어 있는지 확인하십시오 –

6

이 고려 :

Public RunWhen As Double 
Public Const cRunWhat = "my_Procedure" 

Sub StartTimer() 
RunWhen = Now + TimeSerial(0, 10, 0) 
Application.OnTime earliesttime:=RunWhen, procedure:=cRunWhat, _ 
    schedule:=True 
End Sub 

Sub StopTimer() 
    On Error Resume Next 
    Application.OnTime earliesttime:=RunWhen, _ 
     procedure:=cRunWhat, schedule:=False 
End Sub 

Sub my_Procedure() 
    MsgBox "hello world" 
    Call StartTimer 
End Sub 

모든 표준 모듈에 ..............하는 stopTimer을 실행해야 엑셀

참고

은 "분"인수를 종료하기 전에 TimeSerial에서 초임 인수입니다.

관련 문제