엑셀 VBA에서 Application.OnTime 이벤트는 특정 시간에 매크로를 자동으로 실행하는 기능을 제공합니다.
즉, 예약된 시간에 원하는 작업을 실행하거나 일정 간격으로 반복 실행할 수 있습니다.
1. 기본 문법
Application.OnTime EarliestTime, Procedure, [LatestTime], [Schedule]
|
매개변수
|
설명
|
EarliestTime
|
실행할 시간 (Now + TimeValue("00:00:10") → 10초 후 실행)
|
Procedure
|
실행할 매크로 이름 (문자열)
|
LatestTime (선택)
|
최대 실행 허용 시간
|
Schedule (선택)
|
True(기본값): 예약, False: 예약 취소
|
📌 Application.OnTime은 VBA에서 타이머 역할을 할 수 있음
📌 예약된 매크로를 취소하려면 Schedule:=False 사용
2. 10초 후 특정 매크로 실행
Sub 실행예약()
Application.OnTime Now + TimeValue("00:00:10"), "예약된매크로"
End Sub
Sub 예약된매크로()
MsgBox "10초 후 실행된 매크로입니다!"
End Sub
|
📌 10초 후 예약된매크로가 자동 실행됨
3. 매일 특정 시간에 실행
Sub 매일_실행()
Application.OnTime TimeValue("09:00:00"), "아침매크로"
End Sub
Sub 아침매크로()
MsgBox "매일 오전 9시에 실행됩니다!"
End Sub
|
📌 매일 오전 9시에 아침매크로가 자동 실행됨
4. 1분 간격으로 반복 실행
Dim 다음실행시간 As Double
Sub 반복실행()
다음실행시간 = Now + TimeValue("00:01:00") ' 1분 후 실행
Application.OnTime 다음실행시간, "반복작업"
End Sub
Sub 반복작업()
MsgBox "1분마다 실행됩니다!"
반복실행 ' 다시 실행 예약
End Sub
|
📌 1분 간격으로 반복작업을 계속 실행
5. 예약된 실행 취소
Sub 실행취소()
On Error Resume Next
Application.OnTime 다음실행시간, "반복작업", , False
MsgBox "예약된 실행이 취소되었습니다!"
End Sub
|
📌 예약된 반복작업 실행을 취소
6. 특정 시각 이후 실행 제한
Sub 실행제한()
Application.OnTime EarliestTime:=Now + TimeValue("00:00:30"), _
Procedure:="예약된매크로", _
LatestTime:=Now + TimeValue("00:01:00") ' 1분 내 실행 허용
End Sub
|
📌 30초 후 실행 예약, 그러나 1분 내 실행되지 않으면 취소됨
7. 매 시간 정각에 실행
Sub 매시간실행()
Dim 다음시간 As Date
다음시간 = TimeSerial(Hour(Now) + 1, 0, 0) ' 다음 정각
Application.OnTime 다음시간, "정각매크로"
End Sub
Sub 정각매크로()
MsgBox "정각 실행!"
매시간실행 ' 다음 정각 예약
End Sub
|
📌 매 시간 정각에 실행됨 (예: 9:00, 10:00, 11:00, ...)
8. 사용자가 일정 시간 후 자동 로그아웃
Sub 자동로그아웃()
Application.OnTime Now + TimeValue("00:30:00"), "로그아웃"
End Sub
Sub 로그아웃()
MsgBox "30분이 지나 로그아웃됩니다!"
ThisWorkbook.Close SaveChanges:=False
End Sub
|
📌 30분 후 자동으로 엑셀 파일을 닫음
9. 자동 저장 후 10분 후 다시 저장 예약
Sub 자동저장()
ThisWorkbook.Save
Application.OnTime Now + TimeValue("00:10:00"), "자동저장"
End Sub
|
📌 현재 파일을 저장하고 10분 후 다시 자동 저장 예약
10. 10초 후 특정 웹사이트 자동 열기
Sub 웹사이트_열기()
Application.OnTime Now + TimeValue("00:00:10"), "네이버열기"
End Sub
Sub 네이버열기()
ActiveWorkbook.FollowHyperlink "https://www.naver.com"
End Sub
|
📌 10초 후 네이버 웹사이트를 자동으로 열기
📌 OnTime 사용 시 주의할 점
- 매크로 실행 중 강제 종료 시 예약된 실행이 남아있을 수 있음
- 해결 방법: 실행 취소 기능 추가 (Application.OnTime ..., False)
- 파일이 닫히면 예약된 매크로는 실행되지 않음
- 해결 방법: 워크북이 닫히기 전에 Workbook_BeforeClose 이벤트에서 예약 취소
- 예약된 매크로는 정확한 시간에 실행되지 않을 수도 있음
- LatestTime을 설정하여 일정 시간 내에 실행되도록 보장 가능
📝 정리
기능
|
VBA 코드 (OnTime 이벤트)
|
10초 후 실행 예약
|
Application.OnTime Now + TimeValue("00:00:10"), "예약된매크로"
|
매일 특정 시간 실행
|
Application.OnTime TimeValue("09:00:00"), "아침매크로"
|
1분 간격 반복 실행
|
Application.OnTime Now + TimeValue("00:01:00"), "반복작업"
|
예약된 실행 취소
|
Application.OnTime 다음실행시간, "반복작업", , False
|
특정 시각 이후 실행 제한
|
Application.OnTime ..., LatestTime:=Now + TimeValue("00:01:00")
|
매 시간 정각 실행
|
Application.OnTime TimeSerial(Hour(Now) + 1, 0, 0), "정각매크로"
|
엑셀 자동 로그아웃
|
Application.OnTime Now + TimeValue("00:30:00"), "로그아웃"
|
자동 저장 반복 실행
|
Application.OnTime Now + TimeValue("00:10:00"), "자동저장"
|
웹사이트 자동 열기
|
Application.OnTime Now + TimeValue("00:00:10"), "네이버열기"
|
🔥 VBA의 OnTime을 활용하면 특정 시간에 자동으로 실행되는 매크로를 예약할 수 있습니다! 🚀