This VBA convert slides to 3-Slides Handout.

 

관련 링크: https://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102&docId=315605202#answer1

 

위 링크에 답변대로 3슬라이드를 오른쪽에 줄이 아니라 빈 여백을 두고 싶을 때 

짝수 페이지마다 빈페이지를 삽입하고 6슬라이드씩 프린트하는 방법을 소개하였습니다.

 

그런데 질문자는 

유인물 로 출력할 때 3슬라이드씩 프린트하려면 우측에 줄이 나오고 슬라이드가 작게 나오는데

좀더 슬라이드만 꽉 채워서 프린트하고 싶은 경우입니다.

 

 

 

Alt-F8 로 매크로를 실행하면

아래처럼 16:9 세로로 된 3슬라이드가 한꺼번에 출력된 PPT가 생성됩니다.

 

 

 

구체적인 과정은

각 슬라이드를 PNG로 저장하고 나서

16:9 세로 프리젠테이션을 생성하고

저장된 PNG를 3개씩 슬라이드마다 추가합니다.

 

매크로는 아래와 같습니다.

더보기

 

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
Option Explicit
 
Sub SlidesTo3SlidesHandout()
    
    Dim PPT As Presentation
    Dim i As Long, j As Long, n As Long
    Dim SW As Single, SH As Single, Ratio As Single
    Dim dPath As String, Fname As String, Pname As String, Bname As String
    Dim sld As Slide, shp As Shape
    Dim x As Single, y As Single, w As Single, h As Single, m As Single
    
    On Error GoTo ErrMsg
    
    '//현재 프리젠테이션
    Set PPT = ActivePresentation
    'Set PPT = ThisPresentation
    Fname = PPT.Name
    Bname = Left(Fname, InStrRev(Fname, "."- 1)   '확장자 없이 이름만 추출
    
    
    '//페이지 크기
    With PPT.PageSetup
        SW = .SlideWidth: SH = .SlideHeight
    End With
    
    '비트맵 그림 저장시 확대비율
    Ratio = 96 / 72 * 2              '*2 , *4배로 늘려서 좀더 높은 해상도로 저장
      
    '프로그레스바 띄우기
    'UserForm1.Show vbModeless
 
    '//모든 슬라이드에 대해 순환
    i = 1
    For Each sld In PPT.Slides
        
        '기존 슬라이드 이미지로 저장
        Pname = Bname & i & ".png"
        'Debug.Print Pname
        sld.Export dPath & Pname, "PNG", SW * Ratio, SH * Ratio
                    
        i = i + 1
 
    Next sld
   
    'If i > 1 Then Debug.Print i - 1 & "개의 이미지를 생성하였습니다." Else GoTo ErrMsg
        
        
    '// 슬라이드 생성
    Set PPT = Nothing
    Set PPT = Presentations.Add(msoTrue)
    PPT.PageSetup.SlideOrientation = msoOrientationVertical
    PPT.PageSetup.SlideSize = ppSlideSizeOnScreen16x9
 
    '//페이지 크기
    With PPT.PageSetup
        SW = .SlideWidth: SH = .SlideHeight
    End With
    
 
    For j = 1 To i - 1
    
        If (j - 1) Mod 3 = 0 Then
            n = n + 1
            Set sld = PPT.Slides.Add(n, ppLayoutBlank)
        End If
        
        m = 8                  ' vertical margin
        h = SH / 3 - m * 2
        
        Pname = Bname & j & ".png"
        Set shp = sld.Shapes.AddPicture(Pname, 01, x, y, w, h)
        
        With shp
            .LockAspectRatio = msoTrue  '가로세로 비율 고정
            .ScaleWidth 1, msoTrue
            .ScaleHeight 1, msoTrue
            .Height = h                 '높이 먼저 설정
            w = .Width
            x = SW / 2 - w / 2
            y = SH / 3 * ((j - 1) Mod 3+ (SH / 3 - h) / 2
            .Left = x
            .Top = y
            .Name = Bname & j
            'Debug.Print .Name, x, y, w, h
        End With
        
    Next j
    
    'Debug.Print j - 1 & " Slide Images Added."
    'Debug.Print n & " Slides added."
    
ErrMsg:
    If Err.Number Then MsgBox Err.Description
    Set PPT = Nothing
End Sub
 
Function ThisPresentation() As Object
    Dim p As Presentation
    
    For Each p In Presentations
        If p.VBProject.Name = "SlidesTo3SlidesHandout" Then
            Set ThisPresentation = p
            Exit Function
        End If
    Next
End Function
 
cs

 

파일을 첨부합니다.

Download:

SlidesTo3SlidesHandout.pptm
다운로드

 

 

 

추가로 모든 슬라이드를 여백없는 4개, 6개 혹은 9개짜리 슬라이드로 만드는 매크로도 추가합니다.

 

2개짜리 16:9비율

SlidesTo2SlidesHandout.pptm
다운로드

 

3개짜리 16:9비율

SlidesTo3SlidesHandout.pptm
다운로드

 

4개짜리 4:3비율

SlidesTo4SlidesHandout43.pptm
다운로드

 

4개짜리 16:9비율

SlidesTo4SlidesHandout169.pptm
다운로드

 

6개짜리 9:16비율

SlidesTo6SlidesHandout916.pptm
다운로드

 

9개짜리 9:16비율

SlidesTo9SlidesHandout916.pptm
다운로드

 

** 가로2개*세로3개 총 6개짜리 가득찬 유인물(A4크기) 슬라이드로 변환(PNG이용)

세로6슬라이드저장1.pptm
다운로드

 

** 가로2개*세로3개 총 6개짜리 가득찬 유인물(A4크기) 슬라이드로 변환(EMF이용 - 인쇄에 적합)

세로6슬라이드저장1EMF.pptm
다운로드

 

 

 

** 이 밖에도 10cm * 21cm 크기의 슬라이드 3장을 만들어서 이 슬라이드들을 A4가로 슬라이드에 EMF로 집어 넣어서 팜플렛, 리플렛을 만들 때 이용할 수도 있습니다. 

 

 

가로3팜플렛저장1EMF.pptm
다운로드

 

 

 

** 자신의 PPT에서 매크로를 적용하는 방법:

https://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=370352365#answer1

 

첨부한 PPTm과 자신의의 pptx가 동시에 열린 상태에서

사용자의 pptx 슬라이드를 선택하고 Alt-F8을 누른다음

아래 매크로 위치를 '세로6슬라이드1.pptm' 등을 선택하고

'SldiesToHandout' 매크로를 선택해서 실행하면 됩니다.

 

 

사용자의 필요에 따라 슬라이드개수 즉 가로 2칸 , 세로 3칸 숫자 수정, 

슬라이드비율 유지 여부,

여백 크기 설정 등은 주석을 참고하여 Alt-F11 소스를 수정하면 됩니다.

 

 

[2021.09.11.]

매크로 실행 화면
실행 결과

아래 버전은 가로, 세로 칸수를 사용자가 입력한 대로 

Handout  슬라이드를 만들어주는 버전입니다.

생성되는 슬라이드는 세로 

2, 3 을 입력하면 1페이지에 2*3(6개)개의 슬라이드이미지가 삽입되고

3, 5 를 입력하면 1페이지에 3*5개(15개)의 슬라이드이미지가 삽입됩니다.

각 슬라이드는 슬라이드 2배크기의 PNG 이미지로 저장해서 삽입해서 만들어줍니다.

중간 이미지를 EMF 로 삽입하려면 주석을 참고하세요.

현재는 슬라이드이미지 사이의 여백이 0 인데 간격을 두려면 m 값을 수정하세요.

또한 슬라이드에 연한 윤곽선을 두었는데 없애려면 .Line.Visible = msoTrue 를 msoFalse 로 바꿔주시면 됩니다.

 

Slides2Handout.pptm
0.25MB

 

아래는 페이지 번호를 삽입하고 여백을 조정하는 버전입니다.

Slides2Handout(A4세로유인물).pptm
0.25MB

 

 

 

아래는 실행 캡쳐 영상입니다.

 

인쇄할 때는 전체페이지 슬라이드를 누르고 '용지에 맞게 크기 조정'에 체크하는 것이 일반적으로 더 크게 출력됩니다.

파워포인트는 프린터를 위한 기본여백(약 0.5mm내외)을 남겨두기 때문에 꽉채워서 출력하는 것은 불가능합니다.  

(PDF로 내보내기해서 출력하면 조금더 크게 출력할 수는 있습니다.)

 

** 지금 현재는 생성되는 슬라이드 크기와 방향이 16:9세로인데

만약 새로 생성되는 슬라이드를 'A4가로'로 만들려면
Alt-F11 누르고 아래처럼 코드를 수정해주세요.

 

PPT.PageSetup.SlideOrientation = msoOrientationVertical
PPT.PageSetup.SlideSize = ppSlideSizeOnScreen16x9
'// 연속된 위 두 줄을 찾아 아래처럼 고쳐주세요.
PPT.PageSetup.SlideOrientation = msoOrientationHorizontal
PPT.PageSetup.SlideSize = ppSlideSizeA4Paper

 

 

[2022.05.20} 7개 슬라이드를 2*2개씩 2슬라이드로 변환하는 캡쳐 영상:

이 버전은 출력물의 크기는 원본 슬라이드 크기를 유지하고

용지방향은 가로로 할지 세로로 할지 사용자가 선택하는 버전입니다.

Slides2Handout_가로세로선택.pptm
0.25MB

 

 

16:9 슬라이드에서 A4 세로 2장 가득차게 삽입하는 경우:

 

조건

1. 생성되는 슬라이드의 크기는 A4 슬라이드

2. A4 가로/세로 슬라이드 선택 가능

3. 슬라이드 썸네일의 가로세로 비율 유지 여부 선택 가능

4. 슬라이드 썸네일은 가운데 정렬(정렬하지 않으려면 AlignCenter = False로 수정)

 

Slides2HandoutToA4_2_3.pptm
0.08MB

 

(2024.2월 현재 가장 최신 버전입니다.)