- 최초 작성일: 2017-09-15
- 최종 수정일: 2026-09-30
- 조회수: 16 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: VBA 파워 코딩 238회 - 여러 시트를 PPT로
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
지난 시간에는 워크시트 한 곳의 특정 영역을 PPT 슬라이드로 내보내 보았습니다. 이번에는 한 단계 더 나아가, 통합 문서 안의 여러 시트를 한꺼번에 각각의 슬라이드로 만들어 보겠습니다.
통합 문서 내의 모든 시트를 PPT 슬라이드로 보내기
핵심 요약: 여러 시트를 한꺼번에 PPT로 내보내는 ExportSheetsToSlide
ExportSheetsToSlide 프로시저는 통합 문서의 모든 워크시트를 순회하면서, 특정 시트(Preface)를 제외한 나머지 시트의 지정 영역을 각각 새 슬라이드로 내보냅니다.
- 순회 대상: ActiveWorkbook.Worksheets 전체
- 제외 시트: If wrkSheet.Name = "Preface" Then 건너뛰기
- 대상 영역: 각 시트의 B2:G21
- 결과 안내: 생성된 슬라이드 수를 MsgBox로 표시
여러 시트를 한꺼번에 슬라이드로 내보내기
지난 강좌에서 워크시트 내의 특정 영역을 PPT 슬라이드로 내보내는 것을 해보았습니다. 이번에는 통합 문서 안의 여러 시트에 있는 자료들을 한꺼번에 각각의 슬라이드로 내보내기 해 보겠습니다.
이 코드도 마찬가지로 'Microsoft PowerPoint XX.X Object Library'가 '사용 가능한 참조'로 지정되어 있어야 합니다. <Alt> + <F11> 키를 눌러 '도구 - 참조' 메뉴에서 참조 지정을 먼저 해 주세요.
ExportSheetsToSlide 프로시저 작성하기
표준 모듈에 다음 코드를 입력합니다. For Each ~ Next 문으로 통합 문서의 모든 워크시트를 순회하면서, 'Preface' 시트는 건너뛰고 나머지 시트의 'B2:G21' 영역을 각각 새 슬라이드로 내보냅니다.
Sub ExportSheetsToSlide()
Dim PPT As PowerPoint.Application
Dim PPTPresent As PowerPoint.Presentation
Dim PPTSlide As PowerPoint.Slide
Dim wrkSheet As Worksheet
Dim strTarget As String
Dim strTitle As String
Dim i As Integer
Set PPT = New PowerPoint.Application
Set PPTPresent = PPT.Presentations.Add
PPT.Visible = True
strTarget = "B2:G21"
For Each wrkSheet In ActiveWorkbook.Worksheets
wrkSheet.Select
If wrkSheet.Name = "Preface" Then
' Doing Nothing
Else
strTitle = wrkSheet.Name & " 팀 월별 실적"
wrkSheet.Range(strTarget).CopyPicture Appearance:=xlScreen, Format:=xlPicture
Set PPTSlide = PPTPresent.Slides.Add(i + 1, ppLayoutTitleOnly)
PPTSlide.Select
PPTSlide.Shapes.Paste.Select
PPT.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
PPTSlide.Shapes.Title.TextFrame.TextRange.Text = strTitle
End If
i = PPTPresent.Slides.Count
Next wrkSheet
Application.Goto Sheets("Preface").Range("A1"), True
MsgBox i & "장의 슬라이드가 생성되었습니다"
End Sub
코드 설명
If wrkSheet.Name = "Preface" Then 조건으로 강좌 설명이 담긴 Preface 시트는 제외합니다. 나머지 시트는 이름 뒤에 " 팀 월별 실적"을 붙여 슬라이드 제목으로 사용하고, PPTPresent.Slides.Add(i + 1, ...)로 매번 마지막 위치에 슬라이드를 추가합니다. 마지막에는 만들어진 슬라이드 수를 메시지 박스로 알려 줍니다.
코드를 실행하면 '강동', '강서', '강남', '강북' 4개 시트의 내용이 각각의 슬라이드로 옮겨진 것을 확인할 수 있습니다.
참고: 이미지에 대하여
본문의 실행 결과 이미지는 원본 예제 파일에 포함되어 있던 실제 스크린샷을 그대로 사용했습니다.
언제나 그렇듯, 어떤 개체가 있고 그 개체가 가진 속성과 메서드에는 어떤 것들이 있는지 파악하는 것이 중요합니다. '매크로 기록기'를 이용해 개체·속성·메서드를 파악하고, 도움말을 통해 정리하는 습관을 기르시기 바랍니다.
정리 — ExportSheetsToSlide 프로시저
| 요소 | 설명 |
|---|---|
| 순회문 | For Each wrkSheet In ActiveWorkbook.Worksheets |
| 제외 조건 | wrkSheet.Name = "Preface" 인 경우 건너뜀 |
| 복사 영역 | wrkSheet.Range("B2:G21") |
| 슬라이드 제목 | 시트 이름 & " 팀 월별 실적" |
자주 묻는 질문 (FAQ)
Q1. 특정 시트를 하나 더 제외하고 싶으면 어떻게 하나요?
If wrkSheet.Name = "Preface" Then 조건 부분을 If wrkSheet.Name = "Preface" Or wrkSheet.Name = "제외할시트명" Then 형태로 바꾸면 됩니다.
Q2. 시트마다 복사할 영역이 다르면 어떻게 처리하나요?
코드의 strTarget 변수를 시트별로 다른 값으로 바꿔 주는 로직(예: Select Case 문)을 추가하면 시트마다 다른 영역을 지정할 수 있습니다.
Q3. 슬라이드 순서가 시트 순서와 다르게 나옵니다.
PPTPresent.Slides.Add(i + 1, ...)는 항상 마지막 위치(i는 현재까지 만들어진 슬라이드 수)에 슬라이드를 추가하므로, 워크시트 탭 순서와 Preface를 제외한 순서가 곧 슬라이드 순서가 됩니다. 탭 순서를 원하는 순서로 먼저 정렬해 두세요.
마치며
시트 하나씩 복사해서 붙여넣던 반복 작업을 순회문 하나로 끝낼 수 있다는 게 매크로의 매력이죠. '매크로 기록기'로 개체와 속성을 먼저 파악해 보는 습관을 들이면 응용이 한결 쉬워집니다!