파워포인트질을 하다 보니 애니메이션 비스무레한 걸 구현해야 하는 상황이 생겼다. 움직이는 gif나 동영상 파일로 만들자니 화질이 마음에 안 들어서 고민을 하다가 그림 파일 수가 아주 많지는 않아서 그림 파일 수만큼 슬라이드를 만들고 슬라이드마다 같은 위치에 같은 크기로 이미지를 집어넣기로 했다.

이런 작업을 할 때 파워포인트의 슬라이드쇼 추가 기능은 그다지 도움이 안 된다. 생각보다 선택의 폭이 좁은 편이라서 위치나 사이즈 등을 원하는대로 일괄조절하기가 어렵기 때문이다.

그림이 열댓장이면 그냥 일일이 하나씩 집어넣고 그림 크기랑 위치 조정하면 되겠지만, 그렇게까지 그림이 적은 건 아니라서 완전 수동으로는 작업할 수 없는 상황. 결국 매크로를 짜서 돌리기로 했다. 

일단 파워포인트에서 매크로 쓰려면 개발 도구 탭을 활성화시켜야 하는데, 이미 그렇게 되어 있지 않다면 다음과 같이 하면 된다. (적어도 내가 일터에서 쓰는 파워포인트 2010 기준으로는 이렇다)

  1. 파일 - 옵션 - 리본 사용자 지정 누른 다음 왼쪽 맨 위의 “다음에서 명령 선택” 드롭다운 메뉴에서 “많이 사용하는 명령” 선택.
  2. 오른쪽 위의 “리본 메뉴 사용자 지정” 드롭다운 메뉴에서 “기본 탭” 선택
  3. “개발 도구” 왼쪽의 네모 클릭해서 선택된 것으로 설정
개발 도구 탭에서 매크로를 클릭한 다음 뜨는 창에서 매크로 이름을 insert_images 쯤으로 적당히 넣은 다음 “편집” 버튼 누른다.
나는 다음과 같은 코드를 사용했다. 자기 상황에 따라 적당히 고쳐 쓰면 되겠다.
(파일은 tt_01.png에서 tt_81.png까지로 저장돼 있었다. 그림은 높이 6.96 cm, 너비 12.6 cm, 그림 위치는 왼쪽 상단 기준으로 왼쪽에서 12.43 cm, 위에서 7.33 cm 로 지정했다. 애니메이션으로 구현될 부분을 제외한 나머지 그림이나 텍스트는 전부 슬라이드 마스터에 집어넣었고 tt_01.png 파일이 들어간 슬라이드 한 장은 수동으로 만들었다. 그림 크기나 위치 정보는 그렇게 수동으로 만든 페이지에서 따온 것이다.)
슬라이드를 새로 추가할 때는 ActivePresentation.Slides.AddSlide(SLIDE_NUMBER, PPTLAYOUT) 메소드를 쓰면 된다.
PPTLAYOUT 자리에는 첫째 슬라이드의 레이아웃을 집어넣으면 되고, 이 때 ActivePresentation.Slides(1).CustomLayout을 집어넣어 주면 된다.
그림 집어넣을 때는 ActivePresentation.Slides(SLIDE_NUMBER).AddPicture() 메소드를 쓰면 된다.
그리고 매크로에서 그림 사이즈를 지정할 때는 픽셀 단위로 지정해야 한다. 프레젠테이션 파일의 해상도를 얼마로 해 놨는지에 따라 다를 수 있는데, 가장 표준적인 72 ppi로 지정되었다고 치면 1 cm는 1/2.54 인치이므로 1 cm당 72 / 2.54 = 28.346 픽셀씩 있는 걸로 보면 된다. cm2Points라는 함수로 지정해서 썼다.
코드는 다음과 같다.

' 여러 파일을 가져와서 전부 같은 사이즈로 리사이즈한 다음 새 슬라이드의 동일한 위치에 배치하는 매크로.

' 삽입할 이미지를 제외한 나머지 이미지는 전부 슬라이드 마스터에 집어넣었으며, 1 페이지에 첫 번째 집어

' 넣을 파일을 수동으로 배치하여 위치를 파악한다.

' 이 경우에는 높이는 6.96 cm, 너비는 12.6 cm, 그림 왼쪽 상단은 왼쪽에서 12.43 cm, 위에서 7.33 cm 위치에

' 들어가도록 맞추고 있다.


Sub insert_images()

    Dim file_name_stub As String

    file_name_stub = "D:\"

    Dim file_name As String

    Dim i As Integer

    Dim pptSlide As Slide

    Dim pptLayout As CustomLayout

    Dim oPic As Shape

    

    Set pptLayout = ActivePresentation.Slides(1).CustomLayout

    

    For i = 2 To 81

        Set pptSlide = ActivePresentation.Slides.AddSlide(i, pptLayout)

        file_name = file_name_stub & "tt_" & Format(i, "00") & ".png"

        Set oPic = ActivePresentation.Slides(i).Shapes.AddPicture(file_name, False, True, cm2Points(12.43), cm2Points(7.33), cm2Points(12.6), cm2Points(6.96))

    Next i

End Sub



Function cm2Points(inVal As Single)

    cm2Points = inVal * 28.346  'VBA에서는 픽셀 단위를 씀. 72 ppi 기준으로 1 cm는

                                '1/2.54 inch이므로 72 / 2.54 = 28.346을 곱하면 됨

End Function


+ Recent posts