8시 45분부터 15시 45분까지 10분 간격으로 [B48:D48] 셀 값을 [B1:D42] 셀 범위에 순차적으로 나타내기
완성 파일 다운로드
Dim cnt As Integer
Private Sub Sstart()
Range("A" & cnt).Value = Application.WorksheetFunction.Text(Now, "hh:mm:ss")
Range("B" & cnt).Value = Range("B48").Value
Range("C" & cnt).Value = Range("C48").Value
Range("D" & cnt).Value = Range("D48").Value
cnt = cnt + 1
Application.OnTime Now + TimeValue("00:10:00"), "Sstart"
End Sub
Public Sub SSW()
On Error Resume Next
cnt = 1
Application.OnTime TimeValue("08:45:00"), "Sstart"
Application.OnTime TimeValue("15:45:00"), "Sstop"
On Error GoTo 0
End Sub
Private Sub Sstop()
On Error Resume Next
Application.OnTime Now + TimeValue("00:10:00"), "Sstart", , False
On Error GoTo 0
End Sub
데이터를 나타낼 행 번호를 정하는 모듈 변수 Cnt 대신 프로시저 내에서 바로 확인하는 코드로 수정했습니다.
그리고 스케줄러에 등록하고 취소할 때 Now를 바로 쓰니 초 단위까지 1초 가량 늦게 동작하면 스케줄러에 등록된 시간과 취소하는 코드의 시간이 달라 취소가 되지 않는 경우가 있어 분 단위까지만 사용하도록 수정합니다.
Public Sub SRun()
Application.OnTime TimeValue("08:45:00"), "SStart"
Application.OnTime TimeValue("15:45:00"), "SStop"
End Sub
Private Sub SStart()
If Range("A1") = "" Then
Cnt = 1
ElseIf Range("A2") = "" Then
Cnt = 2
Else
Cnt = Range("A1").End(xlDown).Row + 1
End If
Range("A" & Cnt).Value = Format(Now, "hh:mm:ss")
Range("B" & Cnt).Value = Range("B48").Value
Range("C" & Cnt).Value = Range("C48").Value
Range("D" & Cnt).Value = Range("D48").Value
Application.OnTime TimeValue(Format(Now, "hh:mm")) + TimeValue("00:10:00"), "SStart"
End Sub
Private Sub SStop()
On Error Resume Next
Application.OnTime TimeValue(Format(Now, "hh:mm")) + TimeValue("00:10:00"), "SStart", , False
On Error GoTo 0
End Sub
'엑셀' 카테고리의 다른 글
네이버 뉴스 검색 결과 가져오기 (0) | 2024.03.02 |
---|---|
거스름돈 구하기 알고리즘 (2) | 2023.10.11 |
Application.Volatile (0) | 2022.10.11 |
A열에 해당 행의 마지막 열 데이터를 나타내기 (0) | 2022.03.11 |
고급 필터 매크로를 VBA로 보완(변수, InputBox 함수) (0) | 2022.01.06 |