파워포인트 매크로 저장 - pawopointeu maekeulo jeojang

파워포인트 매크로 저장 - pawopointeu maekeulo jeojang

"PowerPoint"는 자유롭고 사용하기 쉬운 편집 기능들로 간단한 이미지 작업에도 많이 사용됩니다.

하지만 슬라이드를 이미지로 변환시 "다른 이름으로 저장" 기능을 사용하기 때문에 많이 번거롭습니다.

버튼 클릭만으로 선택 슬라이드를 "PNG 이미지" 파일로 변환하는 "매크로(VBA)"를 개발해보도록 하겠습니다.

"MS Office 매크로" 개발을 처음 접하신 분은 아래 링크들을 확인해주세요.

https://ceo.blendthings.com/2

[MS 오피스 매크로] 매크로 개발 시작 (기본 설정)

"MS 오피스"에는 "VBA (Visual Basic for Application)"이라는 자동화 기능이 있습니다. "매크로"라는 이름으로 불리고 업무 하는 동안 자주 쓰는 기능이나 사람이 직접 하기 힘든 많은 양의 작업을 손쉽게 처리..

ceo.blendthings.com

https://ceo.blendthings.com/3

[MS 오피스 매크로] Outlook 메일의 모든 메일 주소 가져오기 (개발 기본 구성 포함)

자신이 주고 받은 모든 메일에 포함되어 있는 메일 주소들의 수집이 필요할 때가 있습니다. 아래 매크로를 이용해서 업무에 활용하세요. "Outlook" 데이터 파일에 저장되어 있는 모든 메일들의 보낸 사람, 수신/..

ceo.blendthings.com


▼ "PowerPoint"에서 "매크로(VBA)"를 사용하기 위해서는 "PowerPoint 매크로 사용 프레젠테이션 (*.PPTM)"

    파일 형식을 사용해야 합니다. 먼저 사용할 파일을 저장 후에 개발을 시작해주세요.

파워포인트 매크로 저장 - pawopointeu maekeulo jeojang

▼ 아래 이미지처럼 "ExportToPngForm" 사용자 정의 폼을 추가 후에 컨트롤을 디자인합니다.

    예제 코드와 맞게 컨트롤 이름을 수정합니다.

파워포인트 매크로 저장 - pawopointeu maekeulo jeojang

"PNG 변환", "취소" 버튼을 더블 클릭해 아래와 같이 이벤트 함수를 생성하고 창이 닫히도록

    코드를 추가해주세요.

ExportToPngForm.frm

0.00MB

ExportToPngForm.frx

0.00MB

파워포인트 매크로 저장 - pawopointeu maekeulo jeojang

▼ FormResult 변수를 이용해서 취소 여부를 확인합니다.

Public FormResult As Boolean

Private Sub btnStart_Click()

    FormResult = True
    Me.Hide

End Sub

Private Sub btnCancel_Click()

    FormResult = False
    Me.Hide

End Sub

▼ "ExportToPng" 모듈을 추가하고 "ExportToPng" 매크로 함수 작성을 시작합니다.

파워포인트 매크로 저장 - pawopointeu maekeulo jeojang

▼ 전체 코드

ExportToPng.bas

0.00MB

Sub ExportToPng()

    ExportToPngForm.Show
    
    ' 취소 버튼을 클릭했을 경우 종료합니다.
    If (ExportToPngForm.FormResult = False) Then
    
        Exit Sub
    
    End If
    
    ' PNG 파일을 저장할 폴더를 선택할 수 있는
    ' 대화상자를 표시합니다.
    Dim fileDialog As fileDialog
    Set fileDialog = Application.fileDialog(msoFileDialogFolderPicker)
    
    fileDialog.AllowMultiSelect = False
    fileDialog.Show
    
    ' 폴더를 선택하지 않을 경우 종료합니다.
    If (fileDialog.SelectedItems.Count = 0) Then
    
        Exit Sub
    
    End If
    
    Dim SelectedFolderPath As String
    SelectedFolderPath = fileDialog.SelectedItems.Item(1)
            
    Dim Slide As Slide
            
    If (ExportToPngForm.obAllSlides.Value = True) Then
    
        ' 전체 슬라이드를 선택했을 때
        For Each Slide In Application.ActivePresentation.Slides
        
            Slide.Export SelectedFolderPath + "\" + Format(Slide.SlideIndex) + ".png", "png"
        
        Next
    
    ElseIf (ExportToPngForm.obCurrentSlide.Value = True) Then
    
        ' 현재 슬라이드를 선택했을 때
        Set Slide = Application.ActiveWindow.View.Slide
        Slide.Export SelectedFolderPath + "\" + Format(Slide.SlideIndex) + ".png", "png"
    
    ElseIf (ExportToPngForm.obSelectedSlides.Value = True) Then
    
        ' 직접 지정을 선택했을 때
        Dim ArrSlides() As String
        Dim Range() As String
        Dim SelectedSlides As String
        Dim SelectedSlide As Variant
        Dim SlideIndex As Integer
        Dim StartIndex As Integer
        Dim EndIndex As Integer
        
        SelectedSlides = ExportToPngForm.tbSelectedSlides.Text
    
        ' 사용자가 입력한 문자열을 "," 로 분리합니다.
        ArrSlides() = Split(SelectedSlides, ",")
        
        For Each SelectedSlide In ArrSlides
        
            If (InStr(SelectedSlide, "-") = 0) Then
            
                ' 숫자만 입력했을 경우
                SlideIndex = CInt(SelectedSlide)
            
                Set Slide = Application.ActivePresentation.Slides.Item(SlideIndex)
                Slide.Export SelectedFolderPath + "\" + Format(Slide.SlideIndex) + ".png", "png"
            
            Else
            
                ' "-" 문자를 이용해 구간을 입력했을 경우
                Range() = Split(SelectedSlide, "-")
                StartIndex = CInt(Range(0))
                EndIndex = CInt(Range(1))
                Dim i As Integer
                
                For i = StartIndex To EndIndex
                
                    Set Slide = Application.ActivePresentation.Slides.Item(i)
                    Slide.Export SelectedFolderPath + "\" + Format(Slide.SlideIndex) + ".png", "png"
                
                Next i
                
            End If
        
        Next
        
    End If

End Sub

저장 폴더 선택 코드

   - Application.fileDialog(msoFileDialogFolderPicker: 윈도우에서 제공하는 폴더 선택 대화상자를 표시

   - AllowMultiSelect: 여러 개의 파일이나 폴더를 선택할 수 있는지 여부

   - fileDialog.SelectedItems: 사용자가 선택한 파일이나 폴더의 경로 목록

   - fileDialog.SleectedItems.Item(1): 선택한 경로중 첫번째 경로를 반환 ※ 1 부터 시작

' PNG 파일을 저장할 폴더를 선택할 수 있는
' 대화상자를 표시합니다.
Dim fileDialog As fileDialog
Set fileDialog = Application.fileDialog(msoFileDialogFolderPicker)
    
fileDialog.AllowMultiSelect = False
fileDialog.Show
    
' 폴더를 선택하지 않을 경우 종료합니다.
If (fileDialog.SelectedItems.Count = 0) Then
    
    Exit Sub
    
End If
    
Dim SelectedFolderPath As String
SelectedFolderPath = fileDialog.SelectedItems.Item(1)

전체 슬라이드 이미지 변환

   - Application.ActivePresentation: 현재 사용자 포커스가 있는 프레젠테이션 문서

   - ActivePresentation.Slides: 문서에 포함되어 있는 모든 슬라이드 페이지 목록

   - Slide.Export: 원하는 경로에 원하는 형식으로 변환 후 내보내기

   - Slide.SlideIndex: 슬라이드의 페이지 번호

' 전체 슬라이드를 선택했을 때
For Each Slide In Application.ActivePresentation.Slides
        
    Slide.Export SelectedFolderPath + "\" + Format(Slide.SlideIndex) + ".png", "png"
        
Next

현재 슬라이드 이미지 변환

   - Application.ActiveWindow: 현재 사용자 포커스가 있는 윈도우

   - ActiveWindow.View: 현재 윈도우의 상세 정보

   - View.Slide: 현재 윈도우의 선택된 슬라이드

' 현재 슬라이드를 선택했을 때
Set Slide = Application.ActiveWindow.View.Slide
Slide.Export SelectedFolderPath + "\" + Format(Slide.SlideIndex) + ".png", "png"

직접 지정한 슬라이드 이미지 변환

   - Split: 지정한 문자열을 특정 문자로 분리

   - InStr: 문자열에 지정한 문자가 있는지 확인 ※ 결과가 0 이면 없음, 1 이상이면 위치 정보

   - CInt: 문자로 되어 있는 숫자를 실제 숫자 데이터로 변환

' 직접 지정을 선택했을 때
SelectedSlides = ExportToPngForm.tbSelectedSlides.Text

' 사용자가 입력한 문자열을 "," 로 분리합니다.
ArrSlides() = Split(SelectedSlides, ",")

For Each SelectedSlide In ArrSlides

    If (InStr(SelectedSlide, "-") = 0) Then
    
        ' 숫자만 입력했을 경우
        SlideIndex = CInt(SelectedSlide)
    
        ...
    
    Else
    
        ' "-" 문자를 이용해 구간을 입력했을 경우
        Range() = Split(SelectedSlide, "-")
        StartIndex = CInt(Range(0))
        EndIndex = CInt(Range(1))
        Dim i As Integer
        
        For i = StartIndex To EndIndex
        
            ...
        
        Next i
        
    End If

Next

 테스트

파워포인트 매크로 저장 - pawopointeu maekeulo jeojang
파워포인트 매크로 저장 - pawopointeu maekeulo jeojang

"Outlook" 에서 메일에 메모를 남기고 싶으시다면 오피스 플러그인을 사용해보세요.

파워포인트 매크로 저장 - pawopointeu maekeulo jeojang

https://www.officeplugin.com 

오피스 플러그인

아웃룩 대용량첨부(2GB), 수신확인, 예약발송, 개별발송, eml저장 및 복원, 구글 캘린더/주소록 동기화 등 30여 가지의 기능을 무료로 제공합니다.

officeplugin.com