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, 0, 1, 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:
추가로 모든 슬라이드를 여백없는 4개, 6개 혹은 9개짜리 슬라이드로 만드는 매크로도 추가합니다.
2개짜리 16:9비율
3개짜리 16:9비율
4개짜리 4:3비율
** 가로2개*세로3개 총 6개짜리 가득찬 유인물(A4크기) 슬라이드로 변환(PNG이용)
** 가로2개*세로3개 총 6개짜리 가득찬 유인물(A4크기) 슬라이드로 변환(EMF이용 - 인쇄에 적합)
** 이 밖에도 10cm * 21cm 크기의 슬라이드 3장을 만들어서 이 슬라이드들을 A4가로 슬라이드에 EMF로 집어 넣어서 팜플렛, 리플렛을 만들 때 이용할 수도 있습니다.
** 자신의 PPT에서 매크로를 적용하는 방법:
https://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=370352365#answer1
사용자의 필요에 따라 슬라이드개수 즉 가로 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 로 바꿔주시면 됩니다.
아래는 페이지 번호를 삽입하고 여백을 조정하는 버전입니다.
아래는 실행 캡쳐 영상입니다.
인쇄할 때는 전체페이지 슬라이드를 누르고 '용지에 맞게 크기 조정'에 체크하는 것이 일반적으로 더 크게 출력됩니다.
파워포인트는 프린터를 위한 기본여백(약 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슬라이드로 변환하는 캡쳐 영상:
이 버전은 출력물의 크기는 원본 슬라이드 크기를 유지하고
용지방향은 가로로 할지 세로로 할지 사용자가 선택하는 버전입니다.
16:9 슬라이드에서 A4 세로 2장 가득차게 삽입하는 경우:
조건
1. 생성되는 슬라이드의 크기는 A4 슬라이드
2. A4 가로/세로 슬라이드 선택 가능
3. 슬라이드 썸네일의 가로세로 비율 유지 여부 선택 가능
4. 슬라이드 썸네일은 가운데 정렬(정렬하지 않으려면 AlignCenter = False로 수정)
(2024.2월 현재 가장 최신 버전입니다.)
'PPT+VBA' 카테고리의 다른 글
PPT, Excel 등 MS 오피스 Office 2010 버전 등 구하기 (4) | 2019.03.16 |
---|---|
실시간 RSS 뉴스와 날씨 슬라이드쇼 (0) | 2019.03.15 |
파워포인트 슬라이드 노트를 TTS 나레이션으로 자동으로 삽입하는 매크로 (8) | 2019.01.05 |
간단한 PPT 점수판 (17) | 2019.01.02 |
파워포인트 타이머 (33) | 2018.11.28 |
PPT 회전룰렛(회전판) 만들기 (2) | 2018.09.07 |
휠 다이아그램(사이퍼디스크) 자동으로 만들기 (2) | 2018.06.21 |
구글번역을 이용한 PPT 슬라이드 자동 번역 (14) | 2018.06.20 |
최근댓글