2009-11-04 3 views
3

통합 문서를 처음 열 때마다 매 15:30 pm에 실행되는 매크로를 작성했습니다. 통합 문서를 닫으면 매크로가 다음에 실행되도록 예약 될 때 통합 문서가 열립니다. 스케줄러를 false로 설정하려고 시도했으며 오류가 발생했습니다. 아래 코드. 이것이 작동하지 않는 아이디어가 있습니까?VBA ontime cancel scheduling

덕분에

Private Sub Workbook_Open() 
    Application.OnTime TimeValue("15:30:00"), "MacroTimeTest" 
End Sub 

public dtime as date 

Sub MacroTimeTest() 

    dtime = (Format(Application.Evaluate("workday(today(), 1)"), "DD/MM/YY") & " " & TimeValue("15:30:00")) 

    'other code has been deleted doesn't affect dtime variable 
End Sub 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 

    'I have tried replacing false with 0 etc but it didn't make a difference 
    Application.OnTime earliesttime:=dtime, procedure:="MacroTimeTest", schedule:=False 

End Sub 
+1

볼 수 있습니다! –

+0

'Object _application의 메소드 OnTime이 실패했습니다'라고 추측합니다. 그러나 OP는 확인을 위해 질문을 편집해야합니다. – pjp

+0

예, 충분한 정보를 제공하지 못해 사과드립니다. 팁 덕분입니다. Raj가 코드 형식을 지정해 주셔서 감사합니다. –

답변

2

난 당신이 작업을 취소 할 수 있도록 시간에 대한 참조를 유지해야한다고 생각합니다. 작업이 아직 실행되지 않은 경우에만 작업을 취소 할 수 있습니다. 시트가

Option Explicit 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 

    On Error GoTo CouldNotCancel 

    Application.OnTime dTime, "MacroTimeTest", , False 
    Debug.Print "Cancelled task to run at " & dTime 

    Debug.Print "Workbook close" 

    Exit Sub 


CouldNotCancel: 
    Debug.Print "No task to cancel" 

End Sub 

Private Sub Workbook_Open() 
    Debug.Print "Workbook open" 

    dTime = TimeValue("15:59:00") 

    Debug.Print "Next run time " & dTime 
    Application.OnTime dTime, "MacroTimeTest" 

End Sub 

이 그 다음 모듈에

Option Explicit 
Public dTime As Date 
Public Sub MacroTimeTest() 

    'schedule next run 
    dTime = TimeValue("15:59:00") 

    'schedule next run 
    Debug.Print "Scheduling next run at " & dTime 

    Application.OnTime dTime, "MacroTimeTest" 

    Debug.Print "Running macro" 

End Sub 

이 방법 dTime의 같은 값을 매크로를 추가 닫힐 때까지 ThisWorkbook에서

는 15시 59분에서 매크로를 실행하려면 다음을 입력 이를 사용하여 예약 된 작업을 취소하는 데 사용됩니다.

더 이상 작업이 예약되지 않은 경우, 즉 MacroTimeTest의 오류가 발생하면 통합 문서 닫기 이벤트가 오류를 처리합니다.

은 VBA 편집기에서 직접 실행 창에서 디버그 출력보기 (Ctrl + G) 당신은 사람들이 오류가 무엇인지 알 수 있도록해야합니다