- 엑셀매크로(VBA)로 파워포인트 문서 생성
많은 양의 규칙적인 엑셀 데이터를 가지고, 파워포인트 슬라이드를 생성하는 자동화코드를 공유합니다.
(제가 직접 연구하고 테스트 끝낸 코드입니다.)
일일이 수작업으로는 거의 불가능한 일을 단 몇십초만에 가능하게 하는
자동화의 끝판왕이라고 하겠네요.
아래와 같은 엑셀 데이터를 PPT 문서로 인쇄합니다.
1) 데이터
2) 실행 결과 (PPT생성)
'전체 코드
'응용해서 이용하시면 되겠습니다. (물론 VBA에 지식이 어느정도 있는 분들만..)
필수: 엑셀-Alt+F11> VBA에디터 > 도구- 참조 > 'MicroSoft PowerPoint 1X.X Object Library" 체크돼 있어야 합니다.
'엑셀 리스트를 파워포인트 슬라이드로 뿌린다
Sub ExcelRangeToPowerPoint()
Dim PowerPointApp As PowerPoint.Application
Dim myPresentation As PowerPoint.Presentation
Dim mySlide As PowerPoint.Slide
'===========================
Dim i As Integer
Dim BoxEntry As PowerPoint.Shape, BoxPronun As PowerPoint.Shape, BoxMean As PowerPoint.Shape, BoxIDX As PowerPoint.Shape
Dim strEntry As String, strPron As String, strMean As String, strPOS As String, strIDX As String
Dim r As Range, rng As Range
'===========================
Set rng = Sheet3.Range("C2:C33") '리스트 영역
'=====================================
On Error Resume Next '
Set PowerPointApp = GetObject(class:="PowerPoint.Application") '파워포인트가 이미 열렸나?
Err.Clear 'Clear the error between errors
If PowerPointApp Is Nothing Then Set PowerPointApp = CreateObject(class:="PowerPoint.Application")
If Err.Number = 429 Then '
MsgBox "PowerPoint could not be found, aborting."
Exit Sub
End If
On Error GoTo 0
'=====================================
PowerPointApp.Visible = True '파워포인트 보이기
PowerPointApp.Activate '
Set myPresentation = PowerPointApp.Presentations.Add '새 PPT 문서 생성
For Each r In rng 'C열 단어열 순환
i = i + 1
strIDX = Replace(r.Offset(0, -2).Value, "idx", "")
strEntry = r.Offset(0, 0).Value
strPron = r.Offset(0, 1).Value
strPOS = r.Offset(0, 2).Value
strMean = r.Offset(0, 3).Value
'------------------------------------------
Set mySlide = myPresentation.Slides.Add(1, ppLayoutBlank) '슬라이드1장씩 추가
With mySlide
.BackgroundStyle = 1
.Background.Fill.ForeColor.RGB = RGB(20, 20, 20)
End With
'---------------텍스트 상자 생성> 텍스트 입력---------------------------
Set BoxIDX = mySlide.Shapes.AddTextbox(msoTextOrientationHorizontal, Left:=50, Top:=80, Width:=600, Height:=50)
With BoxIDX.TextFrame.TextRange
.Text = strIDX
.Font.Bold = True
.Font.Size = 35
.Font.Color.RGB = RGB(204, 255, 255)
.ParagraphFormat.Alignment = ppAlignCenter
End With
Set BoxEntry = mySlide.Shapes.AddTextbox(msoTextOrientationHorizontal, Left:=50, Top:=150, Width:=600, Height:=80)
With BoxEntry.TextFrame.TextRange
.Text = strEntry
.Font.Bold = msoCTrue
.Font.Size = 75
.Font.Color.RGB = RGB(255, 212, 132)
.ParagraphFormat.Alignment = ppAlignCenter
End With
Set BoxPronun = mySlide.Shapes.AddTextbox(msoTextOrientationHorizontal, Left:=50, Top:=250, Width:=600, Height:=50)
With BoxPronun.TextFrame.TextRange
.Text = strPron
.Font.Size = 40
.Font.Color.RGB = RGB(204, 255, 204)
.ParagraphFormat.Alignment = ppAlignCenter
End With
Set BoxMean = mySlide.Shapes.AddTextbox(msoTextOrientationHorizontal, Left:=50, Top:=330, Width:=600, Height:=50)
With BoxMean.TextFrame.TextRange
.Text = "[" & strPOS & "]" & strMean
.Font.Size = 28
.Font.Color.RGB = RGB(204, 255, 255)
.ParagraphFormat.Alignment = ppAlignCenter
End With
Next r
Set myPresentation = Nothing
Set PowerPointApp = Nothing
MsgBox i & "장 슬라이드 생성완료!"
End Sub