안녕하세요
'###############################################################
'■ 음성출력 함수
'###############################################################
Function Speak(Value As Variant)
    Dim text As String
    If Value = 3 Then
        text = "소리시작. A1 셀에 3이 입력됨. 그리고 시간을 더 벌기위해 더 말하겠습니다. 제가 말하는 동안 A1 셀을 다른 숫자로 바꾸고 다시 3을 입력해보세요. 소리끝"
        
        WaitFor (3)   '3초를 기다린 후에....아래에서 소리 내기
        Application.Speech.Speak text, SpeakAsync:=True
    End If
End Function


'###############################################################
'시간 대기 함수 WaitFor(1)이면 1초대기  0.01이면 1/100초 대기
' 인터넷에 돌아다니는 유명한 코드.
'###############################################################
Sub WaitFor(NumOfSeconds As Single)
    Dim SngSec As Single
    SngSec = Timer + NumOfSeconds
Do While Timer < SngSec
        DoEvents
   Loop
End Sub
* 첨부파일 실행해보시면 아래 내용을 바로 아실 것입니다.
A1셀에 3이 입력되면 3초 기다린 후 사운드소리를 내는 코드입니다.
소리는 "소리시작 ….... 소리끝"  이게 1개단위 사운드 소리임
자 3을 입력해 보세요. 그럼 소리가 1번 반복됩니다.
3에서 3을 다시 입력하면 소리가 안납니다.
그래서 소리를 다시 내기 위하여  2를 입력했다가
다시 3을 입력해보세요. 그럼 또 소리를 1번 반복합니다.
자! 이제 질문입니다.
위에서 최초 3을 입력후 소리가 재생되는 중에, 소리가 다 끝나지 않았는데도
다른 수를 입력했다가 다시 3을 입력하면(조건만족) 또 소리재생시키게 됩니다. 그런데….
소리가 어쨌든 [처음부터 끝까지]  완전반복을 끝낸 이후, 또 소리가  [처음부터 끝까지]  완전반복 재생됨.
만약 이 3을 변동시키는 동작을 순간적으로 1초에 1000번 했다면,
소리는 앞으로 1000번 반복하게됨.
컴은 1000번 이 소리를 내는걸 완성하기 위해(예약을 완성하기 위해)  1시간 내내 사운드냅니다.
모르는 사람이 보면 컴  무한루프 먹통된걸로 오해하겠죠.
제가 원하는 것 :   최초 3입력후 소리가 최초재생중에 다시 다른수 입력했다가 3입력되면(조건만족)
기존 소리재생(예약된것도 모두) 취소시키고, 말을 끊고, 소리첫부분부터 재시작. 가능할까요?
그러니까 "소리시작. A1셀에…. " 말하고 있는 중에 A1=3 입력되면  그 순간 기존 말을 끊고  "소리시작. A1셀에…. "를 다시 바로 시작하게 하고 싶다는 겁니다. 기존것이 100번 예약되도 모두 취소시키고요.
* 사실 소리는 중요한 건 아니고, 소리는 그냥 msgbox 처럼 확인용도이구요. 제가 원하는 것은 이벤트가 발생하여 100번 예약이 되어있어도, 새로운 최근 이벤트 발생시, 기존것을 모두 취소시키고, 최근이벤트만 다시 시작하고 싶다는 취지의 질문입니다. 보기엔 쉬워보여도 상당히 어려운 문제가 아닐까도 합니다.  고수님들의 고견을 부탁드립니다.