관련: 지식인
1. 랜덤 슬라이드로 이동하게 하려면 VBA를 이용하는 것이 효과적입니다.
1-1. 아래와 같이 구역별로 문제나 제시어를 넣어둡니다.
1-2. 첫번째 차례 슬라이드에 구역 이름이 적힌 도형을 배치하여 선택하게 합니다. 구역도형내의 텍스트와 '구역이름'이 정확히 일치해야 합니다. 첫번째 도형 텍스트가 '동물'이라면 구역 중의 하나의 이름이 '동물'이어야 합니다.
1-3. Alt-F11 창에 삽입 > 모듈을 하나 추가하고 아래 코드를 붙여넣고 창을 닫습니다.
Option Explicit
Dim sPos() As Long
Dim sCount As Integer
Dim sOrder() As New Collection
Dim sName() As String
Sub onSlideShowPageChange(SSW As SlideShowWindow)
If sCount = 0 Then
If SSW.View.CurrentShowPosition = 1 Then SectionShuffle
End If
End Sub
Sub onSlideShowTerminate(SSW As SlideShowWindow)
Dim shp As Shape
For Each shp In ActivePresentation.Slides(1).Shapes
If shp.Name Like "Sect_*" Then
shp.Fill.Transparency = 0
End If
Next shp
sCount = 0
End Sub
Sub SectionShuffle()
Dim pres As Presentation
Dim s As SectionProperties
Dim i As Integer, j As Long, t As Long, r As Long
Set pres = ActivePresentation
Set s = pres.SectionProperties
sCount = s.Count
If sCount = 0 Then MsgBox "구역을 먼저 생성하세요.": Exit Sub
ReDim sPos(1 To sCount)
ReDim sOrder(1 To sCount)
ReDim sName(1 To sCount)
For i = 1 To sCount
If i > 1 Then pres.Slides(1).Shapes("Sect_" & i - 1).Fill.Transparency = 0
sName(i) = s.Name(i)
sPos(i) = 0
For j = 1 To s.SlidesCount(i)
sOrder(i).Add j + s.FirstSlide(i) - 1
Next j
Next i
For i = 2 To sCount '섹션1 제외
For j = 1 To sOrder(i).Count
r = Int(sOrder(i).Count * Rnd) + 1
t = sOrder(i).Item(j)
sOrder(i).Add sOrder(i).Item(r), , , j
sOrder(i).Remove j
sOrder(i).Add t, , , r
sOrder(i).Remove r
Next j
Next i
'확인
For i = 2 To sCount
For j = 1 To sOrder(i).Count
Debug.Print sOrder(i).Item(j),
Next j
Debug.Print sName(i)
Next i
End Sub
Sub SectionGotoRandom(shp As Shape)
If sCount = 0 Then MsgBox "Replay를 클릭하세요.": Exit Sub
Dim shpName As String
Dim targetIdx As Long
Dim found As Boolean
Dim i As Integer
shpName = shp.TextFrame.TextRange '섹션 이름
For i = 1 To sCount
If sName(i) = shpName Then
found = True
If sPos(i) >= sOrder(i).Count Then MsgBox "구역내 마지막 슬라이드 완료. 재시작하려면 'Replay'를 누르세요.": Exit Sub
sPos(i) = sPos(i) + 1
targetIdx = sOrder(i).Item(sPos(i))
SlideShowWindows(1).View.GotoSlide targetIdx, msoTrue
If sPos(i) = sOrder(i).Count Then
shp.Fill.Transparency = 0.75
End If
End If
Next i
If Not found Then MsgBox "해당 구역이 없습니다. 클릭한 도형의 텍스트와 구역이름을 확인하세요."
End Sub
1-4. 첫번째 슬라이드의 각 구역 도형을 선택하고 삽입 > 실행에서 SectionGotoRandom명령을 연결시킵니다.
1-5. 슬라이드 쇼를 시작하고 테스트해봅니다.
실행화면 캡쳐영상입니다.
구역 내의 모든 슬라이드를 이동한 경우에는
아래처럼 구역 도형이 흐려지고 클릭하면 모든 슬라이드를 순환했다는 메시지 상자가 뜹니다.
(단, 구역도형의 개체이름이 Sect_1, Sect_2,... 등 'Sect_'로 시작해야 작동합니다.)
슬라이드 쇼를 시작하면 구역내 슬라이드 순서를 아래처럼 메모리상에서 섞는데
Replay를 누르면 순서(sOrder)를 다시 섞고 구역내 현재 위치(순서: sPos)를 첫번째(1)로 초기화하고 투명도형도 원위치시킵니다. 현재 구역마다 5개의 슬라이드가 들어 있는데 구역 내의 슬라이드개수가 서로 달라도 문제는 없습니다. (Collection배열의 장점)
5 6 3 4 2 1구역 8 10 7 9 11 2구역 12 13 16 15 14 3구역 19 20 21 18 17 4구역 |
슬라이드쇼를 종료하고 다시 시작하면 초기화됩니다.
구역을 추가하거나 각 구역의 슬라이드 삽입/삭제/수정해도 됩니다.
5구역을 추가한다면 4구역 도형을 복사하고 도형이름을 Sect_5로 바꾸고 도형내부 텍스트를 '5구역'으로 수정하면 되겠습니다. 4구역 도형을 복사했기 때문에 삽입>실행에서 SectionGotoRadom 을 연결하는 것은 이미 설정되어 있겠습니다.
샘플 파일 첨부합니다.
첨부파일은 다운로드 받은 후에 파일속성에서 '차단해제'하고 매크로 허용해야 합니다.
'PPT+VBA' 카테고리의 다른 글
오디오책갈피를 이용한 자막 애니메이션 자동 추가 (0) | 2023.05.03 |
---|---|
슬라이드 영역을 벗어난 부분 자동으로 잘라내기 (0) | 2023.04.28 |
글자 밑에 밑줄 긋기 (1) | 2023.04.25 |
세로로 긴 표(Table) 자동으로 자르기 (0) | 2023.02.25 |
자유형 도형의 점편집시 점과 점을 수평 또는 수직으로 맞추기 (0) | 2023.02.05 |
현재 선택된 도형을 클립보드 이미지로 채우기 (0) | 2023.01.29 |
[엑셀연동] 봉투 주소 일괄 출력 (1) | 2023.01.18 |
TTS활용 영어 단어 풀이 슬라이드 자동 생성 (0) | 2022.12.19 |
최근댓글