Application 개체

🖨️ 엑셀 각 시트의 인쇄영역을 PowerPoint로 내보내는 VBA 매크로 대공개!

노만e 2025. 9. 27. 20:00

보고서용 슬라이드 매번 복사해서 붙여넣고 계신가요?
이제 엑셀에서 인쇄영역만 똑똑하게 추출해서 파워포인트로 자동 전환해보세요!
수작업은 그만! 단 1초면 OK! 🎉


💡 이 매크로가 뭐길래?

이 Excel VBA 매크로는 엑셀 파일 내 각 시트의 인쇄영역만 추출하여
슬라이드 형태로 PowerPoint 프레젠테이션으로 자동 저장해줍니다.

✔️ PPT 작업시간 90% 절감
✔️ 데이터 기반 보고서 제작에 최적
✔️ 엑셀 인쇄영역만 추출하기 때문에 깨끗한 슬라이드 출력!


✅ 주요 기능 한눈에 보기

기능설명
📄 인쇄영역만 추출 각 시트의 PageSetup.PrintArea 만 PPT에 삽입
🎯 자동 슬라이드 생성 시트 개수만큼 슬라이드 자동 생성
🔤 슬라이드 제목 삽입 슬라이드 좌측 상단에 시트 이름 삽입
🎨 크기 자동 조정 슬라이드에 맞춰 비율 유지하며 자동 맞춤
📁 자동 저장 엑셀 파일명과 같은 이름으로 .pptx 저장

🛠️ 사용 방법 (Step by Step)

  1. 매크로 삽입
    • Alt + F11 → 모듈 추가 → 코드 붙여넣기
  2. 인쇄영역 설정
    • 각 시트에서 출력할 범위를 페이지 레이아웃 > 인쇄영역 설정으로 지정
  3. 매크로 실행
    • Alt + F8 → ExportSheetsToPowerPoint 실행
  4. 자동 실행 결과 확인
    • PowerPoint 자동 실행 + .pptx 자동 저장 완료!

📦 출력물 예시

  • 슬라이드마다 엑셀 시트 인쇄영역이 꽉 차게 삽입됨
  • 상단에는 시트 이름이 제목처럼 삽입됨
  • 원본 비율 유지로 데이터 왜곡 없이 깔끔하게 정렬

📌 파일 저장 위치

  • PowerPoint 파일은 현재 엑셀 파일과 같은 경로에 자동 저장
  • 예: 보고서.xlsx → 보고서.pptx

❗ 주의사항

  • 인쇄영역이 없는 시트는 건너뜁니다 (자동 스킵)
  • 숨겨진 시트는 자동 제외되어 안전하게 출력됩니다
  • pptx 저장 형식으로 자동 저장되며 기존 파일은 덮어쓰지 않음

💬 활용 예시

  • 👨‍💼 월간 보고서 요약본 PPT 출력
  • 📊 실적/성과 데이터 시각화 발표 자료
  • 🏗️ 공정 시트별 브리핑 슬라이드 생성
  • 📚 교육 자료 PPT로 전환

🔧 VBA 코드

Sub ExportSheetsToPowerPoint()
    Dim xlApp As Application
    Dim xlWB As Workbook
    Dim xlWS As Worksheet
    Dim pptApp As Object
    Dim pptPres As Object
    Dim pptSlide As Object
    Dim i As Integer
    Dim totalSheets As Integer
    Dim processedSheets As Integer
    Dim pptFileName As String
    Dim excelPath As String
    Dim excelName As String
    
    ' 에러 처리 추가
    On Error GoTo ErrorHandler
    
    ' Excel 애플리케이션 및 워크북 설정
    Set xlApp = Application
    Set xlWB = ActiveWorkbook
    
    ' 총 시트 수 저장
    totalSheets = xlWB.Worksheets.Count
    processedSheets = 0
    
    ' 엑셀 파일 경로와 이름 추출
    excelPath = xlWB.Path
    excelName = Left(xlWB.Name, InStrRev(xlWB.Name, ".") - 1) ' 확장자 제거
    pptFileName = excelPath & "\" & excelName & ".pptx"
    
    ' PowerPoint 애플리케이션 생성
    On Error Resume Next
    Set pptApp = GetObject(, "PowerPoint.Application")
    If pptApp Is Nothing Then
        Set pptApp = CreateObject("PowerPoint.Application")
    End If
    On Error GoTo 0
    
    ' PowerPoint를 화면에 표시
    pptApp.Visible = True
    
    ' 새 프레젠테이션 생성
    Set pptPres = pptApp.Presentations.Add
    
    ' 각 시트를 순회하며 슬라이드로 복사
    For i = 1 To xlWB.Worksheets.Count
        Set xlWS = xlWB.Worksheets(i)
        
        ' 숨겨진 시트는 건너뛰기
        If xlWS.Visible = xlSheetVisible Then
            Application.StatusBar = "처리 중: " & xlWS.Name & " (" & i & "/" & totalSheets & ")"
            
            ' 시트 선택 및 인쇄영역 복사
            xlWS.Activate
            
            ' 인쇄영역이 설정되어 있는지 확인
            If xlWS.PageSetup.PrintArea <> "" Then
                ' 인쇄영역 선택 및 복사
                xlWS.Range(xlWS.PageSetup.PrintArea).Copy
                
                ' 새 슬라이드 추가 (빈 레이아웃)
                Set pptSlide = pptPres.Slides.Add(pptPres.Slides.Count + 1, 12) ' 12 = ppLayoutBlank
                
                ' 슬라이드에 붙여넣기 (그림으로)
                pptSlide.Shapes.PasteSpecial DataType:=2 ' ppPasteEnhancedMetafile
                
                ' 붙여넣은 개체의 크기와 위치 조정
                If pptSlide.Shapes.Count > 0 Then
                    With pptSlide.Shapes(pptSlide.Shapes.Count)
                        ' 슬라이드 크기에 맞게 조정 (여백 고려)
                        Dim slideWidth As Single
                        Dim slideHeight As Single
                        slideWidth = pptPres.PageSetup.slideWidth
                        slideHeight = pptPres.PageSetup.slideHeight
                        
                        ' 비율을 유지하면서 크기 조정
                        Dim scaleWidth As Single
                        Dim scaleHeight As Single
                        scaleWidth = (slideWidth - 40) / .Width  ' 좌우 여백 20씩
                        scaleHeight = (slideHeight - 40) / .Height  ' 상하 여백 20씩
                        
                        ' 더 작은 비율을 사용하여 슬라이드 안에 맞추기
                        Dim scaleRatio As Single
                        scaleRatio = Application.Min(scaleWidth, scaleHeight)
                        
                        If scaleRatio < 1 Then
                            .Width = .Width * scaleRatio
                            .Height = .Height * scaleRatio
                        End If
                        
                        ' 중앙 정렬
                        .Left = (slideWidth - .Width) / 2
                        .Top = (slideHeight - .Height) / 2
                    End With
                End If
                
                ' 슬라이드 제목 추가 (선택사항)
                Dim titleShape As Object
                Set titleShape = pptSlide.Shapes.AddTextbox(1, 10, 10, 200, 30) ' msoTextOrientationHorizontal = 1
                With titleShape.TextFrame.TextRange
                    .Text = xlWS.Name
                    .Font.Size = 18
                    .Font.Bold = True
                End With
                
                Application.CutCopyMode = False
                processedSheets = processedSheets + 1
            Else
                ' 인쇄영역이 설정되지 않은 경우 메시지 (선택사항)
                Debug.Print xlWS.Name & " 시트에는 인쇄영역이 설정되지 않았습니다."
            End If
        End If
    Next i
    
    ' 첫 번째 슬라이드로 이동
    If pptPres.Slides.Count > 0 Then
        pptPres.Slides(1).Select
    End If
    
    ' PowerPoint 파일 저장
    pptPres.SaveAs pptFileName
    
    ' 메시지 박스용 변수 저장 (객체 해제 전에)
    totalSheets = xlWB.Worksheets.Count
    
    ' 정리
    Application.StatusBar = False
    Set xlWS = Nothing
    Set xlWB = Nothing
    Set xlApp = Nothing
    Set pptSlide = Nothing
    Set pptPres = Nothing
    Set pptApp = Nothing
    
    MsgBox "Excel 인쇄영역을 PowerPoint로 내보내기가 완료되었습니다!" & vbCrLf & _
           "총 " & totalSheets & "개 시트 중 " & processedSheets & "개의 인쇄영역을 처리했습니다." & vbCrLf & _
           "저장 위치: " & pptFileName, vbInformation
           
    Exit Sub
    
ErrorHandler:
    Application.StatusBar = False
    Application.CutCopyMode = False
    MsgBox "오류가 발생했습니다: " & Err.Description & " (에러 번호: " & Err.Number & ")", vbCritical
    
    ' 객체 정리
    On Error Resume Next
    Set xlWS = Nothing
    Set xlWB = Nothing
    Set xlApp = Nothing
    Set pptSlide = Nothing
    Set pptPres = Nothing
    Set pptApp = Nothing
End Sub

 

Excel 시트를 PowerPoint 슬라이드로 내보내기.xlsm
0.81MB