인터넷 등에서 텍스트를 가져와서 파워포인트 슬라이드에 붙여넣는 경우
내용이 길어서 아래가 잘리는 경우가 많습니다.
이 때 일일이 복사해서 슬라이드마다 필요한 부분을 수작업으로 나눠주는 것이 번거롭습니다.
예를 들어, 노래가사, 뉴스기사 전문, 영어문장, 프로그램 소스 등
텍스트 길이가 길수록 이런 기능이 아주 절실합니다.
특히 문장 사이에 간격이 필요한 경우는 더욱 길어져서 텍스트를 자동으로 나눠주면 좋겠다는 생각이 듭니다.
게다가 파워포인트는 아래로 길수록 조금만 잘못스크롤하면
다음슬라이드로 넘어가버리기 쉬어서 작업도 쉽지 않습니다.
바로 이렇게 텍스트박스가 긴 경우 아래로 긴 텍스트박스를
한 슬라이드에 맞는 크기로 각각 나눠서 슬라이드를 생성해주는 매크로입니다.
아래 사용법 소개 영상을 참고하세요.
내부적으로 슬라이드 높이를 재서 몇줄이 적당한가를 측정한 다음
현재 슬라이드를 계속 복제하면서
텍스트 박스의 내용을 각각의 슬라이드에 넣어주는 방식입니다.
나뉘어진 첫번째 텍스트박스의 길이(줄수)를 기준으로 작업하기 때문에
최초 텍스트박스의 폰트는 하나의 사이즈로 미리 통일해주는 것이 좋습니다.
1. 먼저 인터넷 등에서 복사해 온 글을 붙여넣습니다.
슬라이드 우클릭해서 텍스트 내용만 붙여넣는 것이 좋습니다.
TED의 경우 시간이 필요없으면 서식유지로 붙여넣는 것도 좋습니다.
2. 현재 선택된 텍스트박스를 대상으로 하기 때문에
기본 텍스트박스의 크기를 조절하는 것이 좋습니다.
글자크기, 줄간격, 좌우 여백, 글자 폰트, 자간 등을 미리 수정합니다.
3. 이제 개발도구 - 매크로 에서 SplitTextBox 를 선택해주면 됩니다.
매크로 실행전 반드시 대상 텍스트박스를 선택한 상태여야 합니다.
만일 새로운 문서를 시작했다면 SplitTextBox 매크로가 들어있는 파일을 아래에서 선택해주면 매크로가 뜹니다.
참고로 ZapCRreturns 는 붙여넣은 텍스트박스에서 빈줄 엔터를 자동으로 삭제해주는 매크로입니다.
4. 실행 결과입니다. 기존 슬라이드는 다음에 새로운 분할 슬라이드가 생성되니 기존 슬라이드는 삭제해도 되겠습니다.
분할된 텍스트박스 및 슬라이드는 처음 텍스트박스와 슬라이드의 서식을 그대로 복제해오기 때문에
미리 텍스트 서식(글자크기, 폰트, 색깔, 줄간격, 정렬, 도형서식)과 슬라이드의 배경 등을 조절해놓는 것이 좋습니다.
매크로내용:
Option Explicit
Const TopMargin As Single = 20
'Split the selected Textbox into slides automatically
'- add slides and move the splitted textboxes to center of each slide
Sub SplitTextbox()
Dim pres As Presentation
Dim oldSld As Slide, sld As Slide
Dim shp As Shape
Dim shpName As String
Dim SW As Single, SH As Single
Dim i As Integer, l As Integer, linesTotal As Integer, linesPage As Integer
Dim tlines() As String
On Error Resume Next
Set pres = ActivePresentation
Set oldSld = ActiveWindow.Selection.SlideRange(1)
Set shp = ActiveWindow.Selection.ShapeRange(1)
shpName = shp.Name
shp.TextFrame.AutoSize = ppAutoSizeShapeToFitText '도형크기 변하게
If oldSld Is Nothing Or shp Is Nothing Then _
MsgBox "먼저 텍스트박스를 선택하세요.", vbInformation + vbOKOnly: Exit Sub
On Error GoTo 0
With pres.PageSetup
SW = .SlideWidth: SH = .SlideHeight
End With
linesTotal = shp.TextFrame.TextRange.lines.Count
ReDim tlines(1 To linesTotal)
For l = 1 To linesTotal
tlines(l) = shp.TextFrame.TextRange.lines(l)
Next l
i = 1
Do
oldSld.Duplicate(1).MoveTo oldSld.SlideIndex + i
Set sld = pres.Slides(oldSld.SlideIndex + i)
Set shp = sld.Shapes(shpName)
shp.Top = TopMargin
shp.Left = SW / 2 - shp.Width / 2
'Debug.Print "page: " & i
'Debug.Print linesPage * (i - 1) + 1; " to "; linesPage * i
With shp.TextFrame.TextRange
If i = 1 Then
For l = linesTotal To 1 Step -1
' 한 페이지당 줄수 계산
If shp.Top + shp.Height <= SH - TopMargin _
Then linesPage = l: Exit For
.lines(l).Delete
Next l
Else
.Text = ""
For l = linesPage * (i - 1) + 1 To linesPage * i
.lines.InsertAfter tlines(l)
If l >= linesTotal Then Exit Do
Next l
End If
i = i + 1
End With
Loop
MsgBox "작업 완료!" & vbNewLine & _
"총 줄수: " & linesTotal & vbNewLine & _
"페이지당 줄수: " & linesPage & vbNewLine & _
"분할 페이지 수: " & i, vbInformation + vbOKOnly
End Sub
Sub ZapCReturns()
Dim pres As Presentation
Dim sld As Slide
Dim shp As Shape
Dim l As Integer
On Error Resume Next
Set pres = ActivePresentation
Set sld = ActiveWindow.Selection.SlideRange(1)
Set shp = ActiveWindow.Selection.ShapeRange(1)
shp.TextFrame.AutoSize = ppAutoSizeShapeToFitText '도형크기 변하게
If sld Is Nothing Or shp Is Nothing Then _
MsgBox "먼저 텍스트박스를 선택하세요.", vbInformation + vbOKOnly: Exit Sub
On Error GoTo 0
With shp.TextFrame.TextRange
For l = .lines.Count To 2 Step -1
'If .lines(l).Text = Chr(13) And .lines(l - 1).Text = Chr(13) Then
If .lines(l).Text = Chr(13) Then _
.lines(l).Delete
Next l
End With
End Sub
매크로파일 첨부합니다.
문단 사이의 Paragraph Break를 삭제하는 버전을 추가합니다.
'PPT+VBA' 카테고리의 다른 글
[WordScatter] 슬라이드에 랜덤 단어 흩뿌리기 (2) | 2020.08.02 |
---|---|
슬라이드 구역별로 페이지 번호 삽입 (2) | 2020.07.24 |
문장에 빈칸 도형 일괄 추가 매크로 (6) | 2020.07.20 |
유투브 영상 삽입 후 에러(온라인 비디오가 현재 차단되어 있습니다. Online videos are currently blocked.) 해결 방법 (0) | 2020.06.16 |
파워포인트 2019에서 달라진, 추가된 기능들 요약 (0) | 2020.04.01 |
도넛모양 다이아그램 만들기 (0) | 2020.03.11 |
여러개의 빈줄이 있는 슬라이드 자동 추가 (0) | 2020.03.05 |
PPT 표(Table) 서식 복사/적용 (12) | 2020.01.27 |
최근댓글