상단에는 시계가 돌아가고
Start 를 누르면 타이머(스톱워치)가 작동하고
Record 를 누를 때마다 현재 시간을 기록하고 누적합니다.
타이머 시간을 누르면 잠시 일시정지 혹은 재시작합니다.
Reset 을 누르면 초기화 합니다.
누적 된 타이머 기록은 타이머 아래 텍스트 상자에 쌓이게 됩니다.
더보기
Option Explicit
#If VBA7 Then
Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, _
ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr
Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
Public TimerID As LongPtr '다른 타이머와 구별하기 위한 타이머의 고유ID(번호)
#Else
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Public TimerID As Long '다른 타이머와 구별하기 위한 타이머의 고유ID(번호)
#End If
Const Default As Integer = 1 '시간을 출력할 슬라이드 번호
Private TimerCount As Single '타이머 카운트
Private TimerStarted As Boolean '타이머 일시정지용
Private TimerPause As Boolean
Sub StartNow()
TimerCount = 0
TimerStarted = True
ActivePresentation.Slides(Default). _
Shapes("Timer").TextFrame.TextRange.Text = Format(0, "hh:mm:ss")
Slide1.TextBox1.Text = ""
'StartTimer
End Sub
Sub RecordNow()
If TimerCount > 0 Then _
Slide1.TextBox1.Text = Format(TimerCount / 86400, "hh:mm:ss") & vbNewLine & Slide1.TextBox1.Text
End Sub
Sub StopNow()
'StopTimer
TimerStarted = False
TimerCount = 0
ActivePresentation.Slides(Default). _
Shapes("Timer").TextFrame.TextRange.Text = Format(0, "hh:mm:ss")
Slide1.TextBox1.Text = ""
End Sub
Sub myTimer()
'1초마다 실행되는 함수로 절대 에러가 나서는 안됨.
'스스로를 호출하는 경우 에러 발생 가능성 높음.
On Error Resume Next
ActivePresentation.Slides(Default). _
Shapes("Clock").TextFrame.TextRange.Text = Format(Time, "hh:mm:ss")
If TimerPause Then Exit Sub
If Not TimerStarted Then Exit Sub
TimerCount = TimerCount + 1
ActivePresentation.Slides(Default). _
Shapes("Timer").TextFrame.TextRange.Text = Format(TimerCount / 86400, "hh:mm:ss")
End Sub
'타이머를 시작 - 슬라이드 쇼 종료전 반드시 StopTimer(KillTimer) 해줘야 함.
Function StartTimer()
If TimerID = 0& Then ' 타이머 ID가 비어 있으면 타이머 시작
TimerID = SetTimer(0&, 0&, 1000&, AddressOf myTimer) ' 세번째 인수가 인터벌 간격(1000 = 1초)
End If
End Function
'타이머를 종료
Function StopTimer()
On Error Resume Next
KillTimer 0&, TimerID ' 타이머 서비스를 종료
TimerID = 0& ' 타이머ID도 초기화
End Function
'타이머를 잠시 중단
Sub PauseTimer()
TimerPause = Not TimerPause
End Sub
'쇼 종료시 자동 실행
Public Sub OnSlideShowTerminate(SSW As SlideShowWindow)
StopTimer ' 종료시 타이머 종료하지 않으면 치명적 에러발생 유의!
StopNow
End Sub
'슬라이드가 시작하면 자동으로 타이머 시작
Public Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
If ActivePresentation.SlideShowWindow.View.CurrentShowPosition = Default Then
StartTimer
Else
StopTimer
End If
End Sub
파일 첨부합니다. 차단해제 후 매크로 컨텐츠 허용하세요.
파워포인트 2019(64비트버전)에서 테스트했습니다.
깜빡이는 버전을 추가합니다.
'PPT+VBA' 카테고리의 다른 글
pptx의 내용에 문제가 있습니다. 프리젠테이션 복구가 시도될 수 있습니다. (0) | 2021.06.26 |
---|---|
사진 일괄 삽입 매크로 (3) | 2021.06.08 |
텍스트상자와 배경도형 정렬 (0) | 2021.05.31 |
ppt를 그림 프리젠테이션으로 저장 (1) | 2021.05.12 |
현재 슬라이드를 윈도우 바탕화면으로 설정 (0) | 2021.03.23 |
MS파워포인트 버전별 차이점 정리 (0) | 2021.01.26 |
PPT 소책자(Booklet) 인쇄 (0) | 2021.01.09 |
도형병합으로 정다각형(Regular Polygon) 그리기 (4) | 2020.12.16 |
최근댓글