관련 : 지식인
예를 들어서 3~7슬라이드는 제대로 보여주고 나머지 슬라이드는 블러처리해서
클라이언트에게 미리 보여주는 상황입니다.
파워포인트에 이런 기능은 없습니다.
직접 처리하자면 파일을 다른 이름으로 저장에서 모든 슬라이드를 그림으로 저장하고
그래픽 소프트웨어로 일부 슬라이드그림만 블러 처리해서 저장한 다음
다시 파워포인트에서 삽입 > 사진 앨범으로 사진들을 일괄 삽입해서 PPTX로 저장하거나 PDF로 저장해야 합니다.
이 과정을 VBA로 자동으로 처리할 수 있습니다.
Const BindingMargin As Single = 0 '제본시 왼쪽 여백
'저장 이미지 형식
Const ImgType = "PNG"
'블러(모자이크) 제외 슬라이드
Const PageFrom = 3
Const pageTo = 7
'Blur정도
Const BlurAmount = 30
Sub A1_SaveAsImagePPT()
Dim prs As Presentation
Dim usr As VbMsgBoxResult
'Set prs = ActivePresentation
usr = MsgBox("페이지 " & PageFrom & "부터 " & pageTo & "를 제외한 페이지를 블러처리하고 " & vbNewLine & vbNewLine & _
"모든 슬라이드를 그림 프레젠테이션으로 저장할까요?", _
vbInformation + vbOKCancel, "모자이크 그림 PPT 생성")
If usr <> vbOK Then Exit Sub
Set prs = ActivePresentation
Set prs = A2_SaveAsImagePresentation(prs)
If Not prs Is Nothing Then
Call A2_PeplaceWithBlur(prs)
End If
End Sub
Function A2_SaveAsImagePresentation(Optional oldPPT As Presentation) As Presentation
Dim newPPT As Presentation
Dim oldLayouts As CustomLayouts
Dim i As Long
Dim SW As Single, SH As Single, nWidth As Single, nHeight As Single
Dim dPath As String, Fname As String, Pname As String, Bname As String
Dim sld As Slide, newSld As Slide, shp As Shape
Dim x As Single, y As Single, w As Single, h As Single
'//현재 프리젠테이션
If oldPPT Is Nothing Then Set oldPPT = ActivePresentation
Fname = oldPPT.Name
Bname = Left(Fname, InStrRev(Fname, ".") - 1) '확장자 없이 이름만 추출
'//새 프리젠테이션 열기
dPath = oldPPT.Path & "\"
Set newPPT = Presentations.Add(WithWindow:=msoTrue)
If newPPT Is Nothing Then GoTo ErrMsg
'//페이지설정 복사
With newPPT.PageSetup
.SlideOrientation = oldPPT.PageSetup.SlideOrientation
.SlideSize = oldPPT.PageSetup.SlideSize
.SlideWidth = oldPPT.PageSetup.SlideWidth
.SlideHeight = oldPPT.PageSetup.SlideHeight
SW = .SlideWidth: SH = .SlideHeight
End With
'비트맵 그림 저장시 확대비율
nWidth = 3072 '2010에서 최대 3072px, 2019이상은 8192px 이상 가능
nHeight = SH * nWidth / SW
On Error GoTo ErrMsg
'//모든 슬라이드에 대해 순환
i = 1
For Each sld In oldPPT.Slides
'기존 슬라이드 이미지로 저장
Pname = Bname & i & "." & ImgType
If ImgType Like "EMF" Then
sld.Export dPath & Pname, ImgType
Else
sld.Export dPath & Pname, ImgType, nWidth, nHeight
End If
'새 슬라이드 추가
Set newSld = newPPT.Slides.Add(i, ppLayoutBlank)
'기존 디자인 복사하려면 주석 제거
'newSld.Design = sld.Design
'image 붙이기
h = SH: y = 0: w = SW: x = 0
'제본용으로 인쇄시 홀수페이지는 왼쪽에, 짝수페이지는 오른쪽에 BindingMrgin 추가
If i Mod 2 = 1 Then
x = x + BindingMargin
w = w - BindingMargin
Else
w = w - BindingMargin
End If
Set shp = newSld.Shapes.AddPicture(dPath & Pname, msoFalse, msoTrue, x, y, w, h)
shp.Name = Pname
Kill dPath & Pname '각 슬라이드 이미지 삭제
i = i + 1
Next sld
newPPT.SaveAS FileName:=dPath & Bname & "_New.pptx", FileFormat:=ppSaveAsDefault
If i > 1 Then
If MsgBox(i - 1 & "개의 이미지 슬라이드 복사본를 생성하였습니다:" & vbNewLine & _
dPath & Bname & "_New.pptx" & vbNewLine & vbNewLine & _
"블러처리를 계속할까요?", vbOKCancel) <> vbOK Then
Set newPPT = Nothing
End If
Set A2_SaveAsImagePresentation = newPPT
End If
ErrMsg:
If Err.Number Then MsgBox Err.Description
Set newPPT = Nothing
End Function
Function A2_PeplaceWithBlur(Optional pres As Presentation)
Dim sld As Slide 'Slide
Dim shp As Shape, nshp As Shape
Dim pEft As PictureEffect
Dim SW!, SH!, nWidth!, nHeight!
Dim Pname As String
If pres Is Nothing Then Set pres = ActivePresentation
With pres.PageSetup
SW = .SlideWidth: SH = .SlideHeight
End With
Pname = pres.Path & "\" & "temp." & ImgType
nWidth = 3072
nHeight = SH * nWidth / SW
For Each sld In pres.Slides
If sld.SlideIndex < PageFrom Or sld.SlideIndex > pageTo Then
For Each shp In sld.Shapes
If shp.Type = msoPicture And shp.Name Like "*." & ImgType Then
Set pEft = shp.Fill.PictureEffects.Insert(msoEffectBlur)
pEft.EffectParameters(1).Value = BlurAmount
'shp.Export pres.Path & "\" & "temp." & ImgType, ppShapeFormatPNG
sld.Export Pname, ImgType, nWidth, nHeight
With shp
Set nshp = sld.Shapes.AddPicture(Pname, msoFalse, msoTrue, .Left, .Top, .Width, .Height)
nshp.Name = .Name
End With
Kill Pname
shp.Delete
End If
Next shp
End If
Next sld
If MsgBox("처리 완료했습니다. 저장할까요?", vbOKCancel) = vbOK Then pres.Save
End Function
Alt-F11 누르고 창이 뜨면 삽입 > 모듈 추가한 후에 위 코드를 붙여넣고 F5로 매크로를 실행하면 됩니다.
위의 경우 3~7페이지는 놔두고 나머지 슬라이드는 30정도 블러 처리를 해서 각 슬라이드를 이미지로 저장해서 새로운 ppt를 만들어줍니다.
각 슬라이드가 그림으로 변환된 새 파일이 생성됩니다.
그림이라서 수정할 수도 없고 블러 처리된 슬라이드는 궁금증을 자아내게 됩니다.
_New.pptx 파일을 그대로 사용해도 되고 pdf로 저장해도 됩니다.
첨부한 Before와 After파일 참고하세요.
매크로 실행전 파일
매크로 실행해서 새로 만들어진 파일
'PPT+VBA' 카테고리의 다른 글
모핑전환 사진앨범 만들기 (1) | 2024.06.03 |
---|---|
둥근 네모의 둥근 정도를 도형이 크기와 상관 없이 유지하는 방법 (0) | 2024.06.02 |
슬라이드 노트가 있는 슬라이드만 출력하기 (0) | 2024.05.28 |
사진을 여러 칸(박스)로 자동으로 분할하기 (0) | 2024.05.18 |
물결무늬 선 만들기 (2) | 2024.04.05 |
폴더 내의 모든 pptx파일의 모든 슬라이드를 png로 내보내기 (0) | 2024.04.02 |
편집 모드에서 자동으로 동영상 재생 (0) | 2024.03.13 |
Freeform 도형을 따라 잉크 그리기 애니메이션 자동 생성 (1) | 2024.02.25 |
최근댓글