엑셀 매크로 반복작업 실행 :: Set_Routine 명령문

엑셀 VBA 매크로 명령문을 매초/매분마다 반복 실행하는 Set_Routine 명령문 사용방법을 알아봅니다.

작성자 :
오빠두엑셀
최종 수정일 : 2021. 08. 05. 06:54
URL 복사
메모 남기기 : (1)

엑셀 매크로 반복작업 실행 :: Set_Routine 명령문 사용법

엑셀 Set_Routine 명령문 목차 바로가기
요약

엑셀 Set_Routine 은 특정 매크로를 매초/매분마다 반복실행하는 명령문입니다.

명령문 구문

명령문 반복실행

Set_Routine 명령문, [초], [분], [종료시간], [종료날짜], [종료명령문]
'명령문을 매초/매분마다 반복실행합니다.

명령문 반복실행 종료

Stop_Routine 명령문, [초], [분], [종료시간], [종료날짜], [종료명령문]
'매초/매분마다 반복실행중인 명령문을 종료합니다.
사용된 인수 및 변수 알아보기
인수 설명
명령문
[String]
매초 또는 매분 마다 반복할 명령문입니다. 반드시 텍스트로 입력해야 합니다. 만약 인수가 필요한 명령문일 경우, "명령문 인수1, 인수2, ..." 형태의 텍스트로 입력합니다.

[Long, 선택인수]
명령문을 반복할 초 단위입니다. 기본값은 5 입니다.

[Long, 선택인수]
명령문을 반복할 분 단위입니다. 기본값은 0 입니다.
종료시간
[String, 선택인수]
명령문 반복을 종료할 시간입니다. "hh:mm:ss" 형태의 텍스트로 입력합니다.
종료날짜
[String, 선택인수]
명령문 반복을 종료할 날짜입니다. 종료 시간을 입력하면, 반드시 같이 입력되어야 합니다. "yyyy-mm-dd" 형태의 텍스트로 입력합니다.
종료명령문
[String, 선택인수]
종료시간이 되어 명령문 반복이 종료될 때 실행할 명령문입니다. 텍스트로 입력합니다.

예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.


상세 설명

엑셀 Set_Routine 명령문은 특정 매크로 명령문을 매초/매분마다 반복실행하는 명령문입니다. 매 10초마다 인터넷 데이터를 크롤링하거나, 매 3분마다 안내메시지를 출력하는 등 다양한 반복작업에 활용할 수 있습니다.

반복할 시간과 반복할 날짜를 지정하면 특정 명령문을 지정한 시간까지 반복해서 실행할 수 있습니다. 또한 반복이 종료되면서 실행할 명령문도 같이 지정할 수 있습니다.

Set_Routine 명령문은 실행중인 엑셀의 백그라운드에서 실행되므로, 명령문을 반복 실행하면서 다른 명령문을 동시에 실행할 수 있습니다. 하지만 엑셀을 종료하면 반복중이던 명령문은 자동으로 종료됩니다.

Stop_Routine 명령문으로 반복실행중인 명령문을 강제로 종료하려면, Set_Routine 으로 입력했던 인수와 동일한 인수를 입력해야 합니다.

본 명령문은 Application.Ontime 함수를 사용합니다. Application.Ontime 함수에 대한 자세한 설명은 MS 홈페이지 관련 링크를 참고하세요.

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

엑셀 매크로 반복작업 실행, Start_Routine 명령문 동작원리

Start_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
5 1 투표
게시글평점
1 댓글
Inline Feedbacks
모든 댓글 보기
1
0
여러분의 생각을 댓글로 남겨주세요.x