글목록

2022년 10월 17일

PowerPoint 매크로 - 특정 슬라이드 또는 특정 개체 매끄럽게 선택하기

PowerPoint 매크로를 이용해 특정 슬라이드로 이동하거나, 특정 도형을 선택하고 싶은 경우가 있습니다. 단순히 Slides(i).Select 또는 Shape.Select msoTrue 를 사용하면 쉽게 될 것 같습니다만, 현재 작업창에서 어떤 개체나 어떤 창을 선택한 상태이냐에 따라 이게 매끄럽지 않은 경우가 있습니다.

예를 들어, 1번 슬라이드를 선택한 상태에서, 3번 슬라이드의 2번째 도형을 선택하라고 하면, 

ActivePresentation.Slides(3).Shapes(2).Select msoTrue

이렇게 작성하면 해당 도형을 선택된 상태가 될 것 같지만, 오류가 발생됩니다. 해당 슬라이드가 활성화되어 있지 않기 때문입니다.

유사하게, 특정 슬라이드를 선택한 상태를 만들고 싶을 때에도

ActivePresentation.Slides(1).Select

이렇게 하면 될 것 같은데, 오류메세지는 발생하지 않지만, 이상하게도 화면이 전환이 되지 않은 상태로 매크로가 종료되는 경우가 종종 있습니다. 아마, 작업창에서 현재 작업 영역 또는 선택도니 상태에 따라서, 매크로가 비정상적으로 작동하는 것으로 판단됩니다.

가장 일반적인 작업 상태, 즉 PowerPoint를 처음 실행하면 활성화되는 상태로 현재상태를 만들어준 후, 원하는 개체(슬라이드나 도형)를 선택하도록 하면 매크로를 이용해 개체 선택을 변경하는 것이 매끄러워 집니다.

아래에 특정 도형이나 슬라이드를 선택한 상태를 만드는 함수 예시를 작성하였으니, 필요에 맞게 응용해서 사용하시면 되겠습니다.

--------------------------------------------------------------
Function SelectSlide(iSlideNum As Long)
  With ActivePresentation
    If .Slides.Count = 0 Or iSlideNum > .Slides.Count Then Exit Sub
  '해당 프리젠테이션의 슬라이드 번호를 입력하면, PowerPoint 보기 모드를 왼쪽에는 썸네일이, 오른쪽에는 슬라이드가 보이는 Normal 상태로 바꾸줍니다.
    ActiveWindow.ViewType = ppViewNormal
  '작업창에서 2번째 Panes, 즉 오른쪽의 슬라이드 작업 영역을 활성화시켜줍니다
    ActiveWindow.Panes(2).Activate
  '원하는 슬라이드 번호를 선택해줍니다.
    .Slides(iSlideNum).Select

  End With
End Function
--------------------------------------------------------------
Function SelectShape(iShape As Shape)
  Dim tObj, tSlide As Slide, i As Integer
  '현재 활성화된 슬라이드에 있는 개체가 아니라면, 개체만 입력하고 선택하라고 하면 오류가 발생합니다. 해당 개체가 있는 슬라이드를 먼저 찾아주어야 합니다. 부모개체가 슬라이드가 될 때까지 반복하여 찾아줍니다. Shape 뿐만 아니라 다른 개체(TextRange..)라도 5회 이상은 실행할 일이 없을 겁니다.
  Set tObj = iShape
  For i = 1 To 5
    Set tObj = tObj.Parent
    If TypeName(tObj) = "Slide" Then Set tSlide = tObj: Exit For
  Next
  '슬라이드가 찾아졌다면, 해당 슬라이드로 이동한 후, 지정한 도형을 선택해줍니다.
  If Not tSlide Is Nothing Then

    ActiveWindow.ViewType = ppViewNormal
    ActiveWindow.Panes(2).Activate
    tSlide.Select
    iShape.Select msoTrue
  End If
End Function
--------------------------------------------------------------

댓글 없음:

댓글 쓰기

의견이나 질문이 있으신 분은 언제든지 댓글을 달아주세요~

많이 본 글 :