WeekdayLife/powerpoint

[파워포인트VBA] 리본메뉴 XML로 만들기 - 오피스2019

2025. 3. 13.



리본메뉴는 VBA로도 충분히 만들 수 있는데, 내가 발견한 문제는 다음과 같다. 당연히 실력이 있는 누군가에게는 해결책이 있을 것이다. 단지 코드를 복잡하게 늘리고 싶지 않다.

 

- 탭의 이름이 무조건 추가기능(add-in)이다.

- 그룹이 'Menu Commands' 하나로 고정이다.

- 아이콘을 FaceId 중에 골라서 선택해야한다.

 

바꿔 말하면, 위의 문제가 아니라면, 그냥 써도 무방하다는 뜻이다. 사실 사용상 전혀 문제가 되지 않을 문제들이다.

 

내가 사용한 방법은 auto_open() 과 auto_close() 프로시저를 사용해 아래와 같이 입력한 것이다. 

Sub auto_open()
    With Application.CommandBars("tools").Controls
        With .Add(msoControlButton)
            .Caption = "MakeTable"
            .OnAction = "tableMaker" 'procedure name
            .FaceId = 8 'icon
            .Style = msoButtonIconAndCaption
            .Visible = True            
        End With
        ''' 이하 버튼 생략
    End With
End Sub

Sub auto_close()
    Application.CommandBars("tools").Reset
End Sub

 

 

이와 같이 실행하면, 아래와 같이 리본메뉴가 생성된다. 사실 너무 간편하다. 메뉴를 늘리는 작업도 크게 어렵지 않다.

 

my image

 

 

 

그러던 중 XML을 사용해서, 리본메뉴를 생성하는 방법을 보았다. xml로 customUI를 구성했을 때의 장점은 위의 단점들을 상쇄시킨다. XML 파일의 기본 구성은 다음과 같다. 이는 오피스2019 기준이며, 아래의 모든 설명도 마찬가지이다.

 

  <ribbon>
    <tabs>
      <tab id="customTab" label="myaddin">
        <group id="table" label="table">
          <button id="MakeTable" label="MakeTable" imageMso="AddCalendarMenu" size="normal" onAction="tableMaker"/>
          <button id="TableSize" label="TableSize" imageMso="AccessListCustom" size="normal" onAction="twidthandheight"/>
          <button id="delBlank" label="delBlank" imageMso="AccessFormDatasheet" size="normal" onAction="delBlank"/>
        </group>
        <!-- 이하 그룹 생략 -->
      </tab>
    </tabs>
  </ribbon>
</customUI>

 

 

 

이를 통하면 그룹을 나눠관리할수가 있다. 아이콘도 faceId에서 imageMso를 사용하게 된다.

 

my image

 

 

imageMso의 요소는 아래 경로에서 확인할 수 있다. 큰 공을 들이지 않더라도, 구글링 몇분이면 PDF파일로 잘 정리된 곳들이 많다.

 

BERT | ImageMSO List Reference

 

bert-toolkit.com

 

 

 

이를 구현하는 방법은 두가지가 있다.

 

직접 xml 파일 삽입

매크로를 사용해야 하므로 pptm 파일을 생성한 뒤, 확장자를 zip 파일로 변경해준다. 해당 압축 파일을 풀면 아래와 같은 폴더를 볼 수 있을 것이다. 여기에 customUI 폴더를 생성해 준다.

 

my image

 

 

그 안에 xml 파일을 customUI14.xml로 저장한다. 이 때, xml 파일에 선언된 프로시저가 pptm의 vba에 선언이 되어있는지 사전에 미리 확인을 해야한다. 프로시저가 없다면 리본메뉴는 에러와 함께 보이지 않게 된다.

 

my image

 

 

 

다시 폴더를 zip 파일로 압축하고, 확장자를 원래대로 pptm으로 강제로 바꿔준다. pptm 파일을 실행해보자. 설정한데로 리본메뉴가 활성화 된 것을 확인할 수 있다.

이제 ppam 파일로 저장해서, 자동으로 실행되도록 설정해주면 끝이다. 방법을 모른다면 아래 링크를 확인하면 된다.

 

 

 

여기서는 myaddin 메뉴가 xml로 생성한 customUI이다.

 

my image

 

 

 

오픈소스(에디터) 사용

수정할때마다 압축을 풀었다 했다 과정이 귀찮다면, 오픈소스 툴(Office RibbonX Editor)을 사용할 수 있다. 새로운 건 아니고, 아는사람은 아는 툴인듯하다.

 

 

GitHub - fernandreu/office-ribbonx-editor: An overhauled fork of the original Custom UI Editor for Microsoft Office, built with

An overhauled fork of the original Custom UI Editor for Microsoft Office, built with WPF - fernandreu/office-ribbonx-editor

github.com

 

 

아래 그림에서처럼, 코드를 작성하고 저장하면, xml 파일이 저장된다.

이외에 xml코드가 제대로 들어갔는지 검증하는 기능이나, 사용자 icon을 포함해주는 기능이라던지, 유용한 기능은 많지만, 귀찮은 관계로 다 사용해보지는 못했다.

 

my image

 

 

꽤나 나이스한 프로그램이지만, 반드시 설치가 진행되어야 하므로 살짝 부담스럽긴 하다.

 

 

사실 처음 적은 vba로 구성한 리본메뉴의 단점들이 크게 불편하지는 않았지만, 그냥 있길래 한번 해봤다. 취향에 따라 선택하면 될 것 같으며, 나는 그냥 vba로 구성해서 사용할 것 같은 느낌이다.

 

 

끝.