메뉴
실무 위키VBA 코드Set_Routine

Set_Routine

Sub

지정한 명령문을 매초·매분마다 반복 실행하는 VBA 명령문으로, 반복을 종료할 시각과 종료 시 실행할 명령문도 지정할 수 있습니다.

Set_Routine 코드 미리보기
구문 Set_Routine 명령문, [초], [분], [종료시간], [종료날짜], [종료명령문]
인수구분 형식 설명
명령문 필수 String
매초 또는 매분 마다 반복할 명령문입니다. 반드시 텍스트로 입력해야 합니다.
인수가 필요한 명령문일 경우 "명령문 인수1, 인수2, ..." 형태의 텍스트로 입력합니다.
선택 Long
명령문을 반복할 초 단위입니다. 기본값은 5 입니다.
선택 Long
명령문을 반복할 분 단위입니다. 기본값은 0 입니다.
종료시간 선택 String
명령문 반복을 종료할 시간입니다. "hh:mm:ss" 형태의 텍스트로 입력합니다.
종료날짜 선택 String
명령문 반복을 종료할 날짜입니다. "yyyy-mm-dd" 형태의 텍스트로 입력합니다.
종료 시간을 입력하면 반드시 같이 입력되어야 합니다.
종료명령문 선택 String
종료시간이 되어 명령문 반복이 종료될 때 실행할 명령문입니다. 텍스트로 입력합니다.

마스터 코드

복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요
Module1 · Set_Routine
'----------------------------
'아래 명령문을 새로운 모듈 안에 붙여넣기 후 사용합니다.
'----------------------------
Option Explicit
Public blnRepeat As Boolean
Public TimeToRun As Double
Dim tmpDate As String
Sub Set_Routine(CodeToRun As String, Optional s As Long = 5, Optional m As Long = 0, Optional UntilTime As String, Optional UntilDate As String, Optional CodeToStop As String)
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ Set_Routine 함수
'▶ 배열을 범위 위로 반환합니다.
'▶ 인수 설명
'_____________CodeToRun : 반복 실행할 명령문입니다. 인수가 있을 경우, 명령문(인수) 형태로 입력합니다. 텍스트로만 입력 가능합니다.
'_____________s : 명령문을 반복할 초 단위입니다. 기본값은 5 입니다.
'_____________m : 명령문을 반복할 분 단위 입니다. 기본값은 0 입니다.
'_____________UntilTime : 명령문의 반복을 종료할 시간입니다. UntilTime이 입력되면 UntilDate도 반드시 입력되어야 합니다.
'_____________UntilDate : 명령문의 반복을 종료할 날짜입니다. UntilDate이 입력되면 UntilTime도 반드시 입력되어야 합니다.
'_____________CodeToStop : 명령문의 반복을 종료하면서 실행할 명령문입니다.
'▶ 사용 예제
'Start_Scheduler "Test"
'Stop_Scheduler "Test"
'##############################################################
If UntilTime <> "" And UntilDate <> "" Then
If DateValue(CStr(UntilDate)) + TimeValue(UntilTime) <= Now Then
Stop_Routine CodeToRun, s, m, UntilTime, UntilDate, CodeToStop
If CodeToStop <> "" Then Application.Run CodeToStop
Exit Sub
End If
End If
If blnRepeat = False Then Application.Run CodeToRun: blnRepeat = True
TimeToRun = Now + TimeSerial(0, m, s)
Application.OnTime TimeToRun, "'ScheduleWork """ & CodeToRun & """," & s & "," & m & ",""" & UntilTime & """,""" & UntilDate & """,""" & CodeToStop & """'"
blnRepeat = True
End Sub
Sub Stop_Routine(CodeToRun As String, Optional s As Long = 5, Optional m As Long = 0, Optional UntilTime As String, Optional UntilDate As String, Optional CodeToStop As String)
On Error Resume Next
blnRepeat = False
Application.OnTime TimeToRun, "'ScheduleWork """ & CodeToRun & """," & s & "," & m & ",""" & UntilTime & """,""" & UntilDate & """,""" & CodeToStop & """'", , False
End Sub
Sub ScheduleWork(CodeToRun As String, s As Long, m As Long, UntilTime As String, UntilDate As String, CodeToStop As String)
Application.Run CodeToRun
Call Set_Routine(CodeToRun, s, m, UntilTime, UntilDate, CodeToStop)
End Sub

활용 예제

카카오톡 문자보내기 명령문을 10분마다 반복 실행하기
'10분마다 반복 실행
Set_Routine "Send_Kakao", 0, 10
'반복 실행중인 명령문 종료
Stop_Routine "Send_Kakao", 0, 10
네이버 크롤링 명령문을 10초마다 반복실행하고 같은날 오후 10시에 종료하기
'크롤링 명령문을 10초마다 반복실행 후 오후 10시에 종료
Set_Routine "Naver_Crawl", 10, 0, "22:00:00", cStr(Date)

안내사항

명령문 전체를 새로운 모듈에 붙여넣은 뒤 사용합니다.
반복 실행 중에도 다른 명령문을 동시에 실행할 수 있지만, 엑셀을 종료하면 반복중이던 명령문도 함께 종료됩니다.
반복을 강제로 종료하려면 Stop_Routine 에 Set_Routine 과 동일한 인수를 입력해 실행합니다.
댓글 1
5 (1개 평가)
강민준🤗
강민준🤗 2024.08.11 13:06
좋은 자료 감사합니다.🙇‍♂️
스크랩 완료