VBA를 이용한 Powerpoint 타이머입니다.
게임할 때, 시험볼 때나 제한 시간을 줄 때 유용합니다.
지정된 시간에서 카운트 다운하다가
00:00:00에 멈춥니다.
제일 상단에는 현재 시간이 표시되고
맨아래의 눈금은 진행 상태바라고 볼 수 있습니다. 노란색으로 점점 채워집니다.
우측 상단 톱니바퀴 아이콘을 누르면 제한시간을 지정할 수 있습니다.
최대 23:59:59 까지 지정할 수 있습니다.
hh:mm:ss 형식이 맞지 않으면 동작하지 않습니다.
카운트 도중 타이머숫자나 왼쪽 상단 아이콘을 누르면
일시정지/재시작합니다.
TV나 빔프로젝터 환경에 따라 16:9와 4:3 버전으로 나눴습니다.
16:9화면 버전
4:3화면 버전
*****
00:00:00가 되면 다시 카운트를 증가시키는 버전
16:9화면 버전
4:3화면 버전
16:9화면 카운트 업 버전(00:00:00부터 시작)
반드시 여실 때 제한된 보기 해제하고 매크로 허용하셔야 작동합니다.
기본 제한 시간은 1:00인데 이것은 소스를 고치면 됩니다.
*****
자정까지 카운트다운하는 버전을 추가합니다.
16:9화면 자정카운트 버전
위 버전에서 시계를 디지털로 바꾼 버전입니다.
폰트를 사용하지 않고 도형으로 변환시킨 것이라 따로 디지털 폰트가 필요하지 않습니다.
단순 디지털 시계
/******************* 2007~2016 32비트 및 64비트버전에서 테스트됨 ********************/
동작화면 캡쳐영상입니다.
혹시 직접 만들어보거나 수정해보고 싶어서
단순한 버전을 원하시면 아래 지식인 글을 참고하세요.
실시간 시계만 있는 샘플용 초간단 시계
여러 페이지(4페이지)에 타이머를 추가하는 버전을 추가합니다.
관련 링크: https://kin.naver.com/qna/detail.naver?d1id=1&dirId=102020103&docId=405849814
하나 더, 예전에 카페에공개한 '리얼한 시계'버전 링크합니다.
https://cafe.naver.com/gameppt/125756
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
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
Private HostObj As HostClass 'HostClass로 HostObj변수 선언- HostClass는 파워포인트 슬라이드쇼의 종료를 감지
'Public TimerID As Long '다른 타이머와 구별하기 위한 타이머의 고유ID(번호)
Public TimerCount As Date '타이머가 호출된 카운트
Public Pause As Boolean '타이머 일시정지용
Public TotalCount As Long
Const DefaultCount As String = "1:01" '기본 타이머 시간(초) 600 -> 600/ 60 = 10분
Public Sub StartNext()
'Start Timer
'Move to the 1st Slide
ActivePresentation.SlideShowWindow.View.Next
End Sub
Public Sub myTimer()
'1초마다 실행되는 함수로 절대 에러가 나서는 안됨.
'스스로를 호출하는 경우 에러 발생 가능성 높음.
ActivePresentation.Slides(1). _
Shapes("Clock").TextFrame.TextRange.Text = Format(Time, "hh:mm:ss")
If Pause Then Exit Sub
If TimerCount > 0 Then TimerCount = TimerCount - 1 '타이머 1초 감소
With ActivePresentation.Slides(1).Shapes("Timer").TextFrame2.TextRange
.Text = Format(TimerCount / 86400, "hh:nn:ss")
If TimerCount = 0 Then .Font.Fill.GradientStops(2).Color.RGB = rgbOrange _
Else .Font.Fill.GradientStops(2).Color.RGB = rgbWhite
End With
FillRuler CInt((TotalCount - TimerCount) * 100 / TotalCount), rgbOrange
End Sub
Function getSeconds(s As String) As Long
Dim spl() As String
Dim t As Date
On Error GoTo Oops
s = Trim(s)
spl = Split(s, ":")
If UBound(spl) = 0 Then
s = "0:0:" & s
ElseIf UBound(spl) = 1 Then
s = "0:" & s
ElseIf UBound(spl) > 2 Then
GoTo Oops
End If
getSeconds = Hour(s) * 3600 + Minute(s) * 60 + Second(s)
Exit Function
Oops:
getSeconds = -1
End Function
Sub ResetTimer()
Dim usr As String
Pause = True
usr = InputBox("타이머 설정시간을 hh:mm:ss 스타일로 입력하세요." & vbNewLine & _
"예: 60 ->60초, 1:60 -> 1분60초, 10:10:10 -> 10시간10분10초", "타이머설정", DefaultCount)
If Len(usr) = 0 Then Exit Sub
usr = getSeconds(usr)
If usr = -1 Then MsgBox "hh:mm:ss 형식이 틀립니다." & vbCr & "(23:59:59까지 지원합니다.)": Exit Sub
StopTimer
TimerCount = CLng(usr) + 1
Pause = False
StartTimer
End Sub
'타이머를 시작 - 슬라이드 쇼 종료전 반드시 StopTimer(KillTimer) 해줘야 함.
Public Sub StartTimer()
If TimerCount = 0 Then TimerCount = getSeconds(DefaultCount)
TotalCount = TimerCount
If TimerID = 0& Then ' 타이머 ID가 비어 있으면 타이머 시작
TimerID = SetTimer(0&, 0&, 1000&, AddressOf myTimer) ' 세번째 인수가 인터벌 간격(1000 = 1초)
Set HostObj = New HostClass ' 슬라이드 쇼 종료를 감지하기 시작
End If
End Sub
'타이머를 종료
Public Sub StopTimer()
Dim i As Integer
On Error Resume Next
KillTimer 0&, TimerID ' 타이머 서비스를 종료
TimerID = 0& ' 타이머ID도 초기화
Set HostObj = Nothing ' HostClass 도 풀어줌; 파포종료를 감시하지 않음
FillRuler 100, rgbWhite
End Sub
'타이머를 잠시 중단
Public Sub PauseTimer()
If Pause = False Then Pause = True Else Pause = False
End Sub
Private Sub Delay(Seconds As Single)
Dim TimeNow As Long
TimeNow = Timer
Do While Timer < TimeNow + Seconds
DoEvents
Loop
End Sub
Public Sub myExit()
StopTimer
ActivePresentation.SlideShowWindow.View.Exit
'ActivePresentation.Application.Quit
End Sub
'슬라이드가 시작하면 자동으로 타이머 시작
Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
If ActivePresentation.SlideShowWindow.View.CurrentShowPosition = 1 Then
StartTimer
Else
StopTimer
End If
End Sub
Sub FillRuler(oCount, oColor As Long)
Dim i As Integer
For i = 1 To oCount
ActivePresentation.Slides(1).Shapes("Bar_" & i).Fill.ForeColor.RGB = oColor
Next i
End Sub
Sub DrawRuler()
Dim SW As Single, SH As Single, w As Single
Dim shp As Shape
Dim i As Integer
With ActivePresentation.PageSetup
SH = .SlideHeight: SW = .SlideWidth
w = SW / 100
End With
With ActivePresentation.Slides(1).Shapes
For i = 1 To 100
Set shp = .AddShape(msoShapeRectangle, w * i, SH - 10, 4, 10)
shp.Name = "Bar_" & i
shp.Line.Visible = msoFalse
shp.Fill.ForeColor.RGB = rgbDarkGray
If i Mod 2 = 0 Then shp.Top = SH - 5: shp.Height = 5: shp.Width = 4: shp.Fill.Transparency = 0.5
shp.Select msoFalse
Next i
ActiveWindow.Selection.ShapeRange.Group.Name = "Bar"
End With
End Sub
|
cs |
피드백 환영합니다.
*** 2019.10.29.현재 64비트 호환문제로 API선언부를 모두 수정하였습니다.
'PPT+VBA' 카테고리의 다른 글
실시간 RSS 뉴스와 날씨 슬라이드쇼 (0) | 2019.03.15 |
---|---|
파워포인트 슬라이드 노트를 TTS 나레이션으로 자동으로 삽입하는 매크로 (8) | 2019.01.05 |
간단한 PPT 점수판 (17) | 2019.01.02 |
파워포인트 여러 슬라이드 유인물 출력 (2) | 2018.12.02 |
PPT 회전룰렛(회전판) 만들기 (2) | 2018.09.07 |
휠 다이아그램(사이퍼디스크) 자동으로 만들기 (2) | 2018.06.21 |
구글번역을 이용한 PPT 슬라이드 자동 번역 (14) | 2018.06.20 |
영화엔딩크레딧 효과 (0) | 2018.03.31 |
최근댓글