관련: 지식인

 

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 을 연결하는 것은 이미 설정되어 있겠습니다.

 

샘플 파일 첨부합니다.

첨부파일은 다운로드 받은 후에 파일속성에서 '차단해제'하고 매크로 허용해야 합니다.

 

Random20_구역별1.pptm
0.09MB