메뉴
해결 엑셀2021윈도우11

sheet1 의 매크로, sheet2를 보고 있을때도 실행시킬려면...

G
9월 23일 조회 440
안녕하세요
Option Explicit

Public Sub repeatMacro()
Dim LastRow As Long
Dim ws As Worksheet

 Set ws = ThisWorkbook.Sheets("Sheet1")
    LastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row
    ws.Range("A1").Value = Format(Now, "hh:mm:ss")   'A1에 현재시간 표시, 2초후 또 표시, 2초후 또 표시
    ws.Range("A" & LastRow + 1) = Range("A1").Value

    Application.OnTime Now + TimeValue("00:00:02"), "repeatMacro"
    
End Sub

위는 [ 매 2초마다 A1에 현재시간 갱신하고 그것을 1행식 누적해가기 ] 이고 이 작업은 sheet1에서 합니다.

즉 이 매크로는 단발성 매크로가 아니라 [ sheet1 에서 지속되는 매크로 ] 라고 볼 수 있겠네요.

샘플파일이 있으니 직접 해보시면 압니다. 그런데 sheet2로 이동하면 이 계산및누적해가기를 멈춥니다.

그러다 sheet1 으로 돌아오면 다시 정상작동합니다.

질문 : 제가 sheet2를 보고 있는 상태에서도,  sheet1 에서 수행중인 이 계산을 멈춤없이 지속시킬려면 코드를 어떻게 수정해야 하나요?

감사합니다.

 

제가 시도했었던 방법들 :

1.

Sheets("Sheet1").Activate 이라는 코드를 서두에 삽입하면 된다고 구글인공지능이 말해줌. 그래서 해보니까,  되긴 되는데, sheet2를 보고 있으면 강제로 sheet1으로 가버림. 제가 원하는 건 sheet2에서 계속 머물러도 sheet1은 계산을 지속하는 것을 원함.

2.

서두에 Application.EnableEvents = False 하고, 말미에 Application.EnableEvents = True 하면 된다고 구글인공지능이 말해줘서 해봣는데, 이것은 아예 되지도 않음. 왜 구글이 된다고 말하는지 모르겟음.

댓글 4

수
수메리안 채택된 답변 9월 23일
안녕하세요~
이렇게 해 보세요^^
원 코드가 큰 문제는 없는 듯 한데...
ws.Range("A" & LastRow + 1) = Range("A1").Value

이 부분을
ws.Range("A" & LastRow + 1).Value = ws.Range("A1").Value

이렇게 바꿔보세요~
Option Explicit

Public StopFlag As Boolean

Public Sub repeatMacro()
    Dim LastRow As Long
    Dim ws As Worksheet
    
    '// 중단 플래그 체크
    If StopFlag Then
        StopFlag = False  ' 플래그 초기화
        MsgBox "매크로가 중단되었습니다."
        Exit Sub
    End If
     
    Set ws = ThisWorkbook.Sheets("Sheet1")
    LastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row
    
    '// A1에 현재시간 표시
    ws.Range("A1").Value = Format(Now, "hh:mm:ss")
    '// 새로운 행에 시간 추가
    ws.Range("A" & LastRow + 1).Value = ws.Range("A1").Value
    
    '// 2초 후 다시 실행 예약 (중단 플래그가 False일 때만)
    If Not StopFlag Then
        Application.OnTime Now + TimeValue("00:00:02"), "repeatMacro"
    End If
    
End Sub

':::::::::::::::: 중단 :::::::::::::::::::::::::::::::::
Public Sub StopMacro()
    
    StopFlag = True
    MsgBox "중단 명령이 전달되었습니다. 다음 실행 시점에 중단됩니다."

End Sub

G
GEEM 작성자 9월 24일
@수메리안 님 와~ 너무나 감사드립니다. 덕분에 문제가 해결되었습니다. 손수 동영상까지 만들어주셔서 넙죽 감사드립니다. 중지버튼도 만들어주셧네요. 감사감사. 정말 여기에 전문가분들이 많아 많은 도움을 받고 있습니다.
찬
찬바람 9월 23일
기존 코드도 sheet2의 A1에 어떤 값을 넣어놓으면 계속 입력하고 있네요.
Sheet2로 이동하면, Range("A1").Value 가 Sheet2의 A1 값을 의미하는게 되버리는데 공백이니까 값이 안찍히고 있었던 것입니다.
G
GEEM 작성자 9월 24일
@찬바람 님 답글 감사드립니다. 알려주신점 저도 해보니 정말로 공백이 실행되고 있었다는 걸 이제서야 깨달았습니다. 이점 알려주셔서 감사드립니다. 전혀 생각도 못한 것이었는데 .. 참으로 엑셀을 공부하면 할수록 오묘하네요. 

질문답변 게시판의 최근 글

스크랩 완료