VBA로 엑셀 리본메뉴에 사용자정의 탭,버튼 추가하기

공개됨 글쓴이 Admin댓글 한 개

VBA를 이용하면 내가 원하는 모양으로 엑셀의 리본메뉴에 사용자정의(커스텀) 탭과 버튼을 추가하고 버튼에 기능을 추가할 수 있다. 방법이 좀 복잡하지만 익혀 놓으면 유용한 기능이다.

아래 순서대로 따라해 보자.

 

1) 엑셀파일을 하나 만들고 콜백 프로시저 추가

우선 다음과 같은 엑셀파일을 하나 만든다.

VBA로_리본메뉴에_탭_버튼추가하기.xlsx

위에서 만든 파일을 열고 Alt+F11을 클릭해서 모듈을 추가하고 다음의 콜백 프로시저를 추가한다.

Sub loadCustomTabOfRibbon(ribbon As IRibbonUI)

'//엑셀이 시작되면 사용자정의 탭을 활성화시킨다.
On Error Resume Next
ribbon.ActivateTab "myTabId001"

End Sub
Sub previewFromRibbon(control As IRibbonControl)
'//리본의 사용자정의탭에 추가한 버튼을 클릭하면 실행되는 콜백프로시저

MsgBox "미리보기가 클릭되었습니다!"

End Sub

Sub aboutFromRibbon(control As IRibbonControl)
'//리본의 사용자정의탭에 추가한 버튼을 클릭하면 실행되는 콜백프로시저

MsgBox "확인! 버튼이 클릭되었습니다!"

End Sub

콜백 프로시저 추가 후 엑셀파일을 다음과 같이 매크로파일(확장자가 xlsm)로 저장한다.

VBA로_리본메뉴에_탭_버튼추가하기.xlsm

 

2) 사용자정의용 리본용 xml 파일 준비

리본메뉴에 사용자의용 탭과 버튼을 추가하려면 customUI.xml파일이라는 것이 필요하다. 이 파일은 사용자정의 탭, 버튼의 구조를 정의하는 기능을 한다.

customUI폴더를 만들고, 그 폴더 안에 메모장이나 Notepad++같은 텍스트에디터 프로그램을 이용하여 customUI.xml 파일을 하나 만든다.

customUI.xml파일을 열어서 다음 내용을 추가한다.

<customUI onLoad="loadCustomTabOfRibbon" xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <tabs>
      <tab id="myTabId001" label="리본에 탭 추가" insertAfterMso="TabHome">
        <group id="groupId001" label="그룹이름입니다" >
          <button id="buttonId001" label="미리보기" size="large" onAction="previewFromRibbon" imageMso="FilePrintPreview" screentip="미리보기 버튼을 클릭하면 메시지가 표시됩니다." />
          <separator id="MySeparator1" />		
          <button id="buttonId002" label="확인!" size="large" onAction="aboutFromRibbon" imageMso="HighImportance" screentip="확인 버튼을 클릭하면 메시지가 표시됩니다."/>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

 

3) 파일확장자를 zip으로 바꾸고 리본용 customUI.xml파일 추가

xlsm파일은 사실 여러 파일이 포함되어 있는 압축파일이다. 그래서 확장자 xlsm을 zip으로 바꾸고 압축프로그램으로 열어보면 여러 파일이 포함된 것을 확인할 수 있다.

VBA로_리본메뉴에_탭_버튼추가하기.xlsm 파일을 VBA로_리본메뉴에_탭_버튼추가하기.zip으로 바꾸고 압축프로그램을 실행하면 아래와 같이 zip파일의 내부 구조가 보인다. 이 상태에서 좀 전에 만든 customUI폴더를 마우스를 이용하여 zip 파일쪽으로 이동시킨다

 

폴더째로 압축파일 안으로 들어가는 것인데, 이렇게 하면 사용자 정의 리본메뉴가 엑셀파일에 추가된다. 정상적으로 작업이 되었다면 아래 그림처럼 보인다.

 

4) .rels파일을 만들고 zip파일에 추가

압축파일의 내부를 보면  아래와 같이 “_rels”라는 폴더가 보인다.

이 폴더를 클릭하면 .rels파일이 보인다.

.rels파일은 위의 압축파일 안의 파일들의 관계정보를 저장해 놓은 것이라고 보면 된다. 위에서 우리는 customUI.xml파일을 추가했으므로 이것과 관련된 관계정보를 .rels에 추가해 주어야 리본메뉴에 사용자 정의 탭, 버튼이 보여진다.

이 파일을 zip파일에서 밖으로 꺼내온다. 마우스를 이용해서 끌어내면 밖으로 나온다.

 

꺼낸 .rels파일을 텍스트에디터로 열어서 다음을 파일의 맨 아래 줄의 “</Relationships>”위에 추가한다.

<Relationship Id="myRibbonCustomTabId001" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml"/>

 

정상적으로 추가되었다면 다음과 같은 모양이 된다.

 

.rels파일을 저장하고 다음 그림과 같이 마우스를 이용하여 .rels파일을 zip파일 안으로 다시 넣는다.

 

5) 압축파일을 닫고 확장자를 zip에서 xlsm으로 변경

위 4)번까지의 작업을 완료하고 압축프로그램을 종료하면 변경사항이 모두 압축파일에 반영된다. 다음과 같이 확장자 zip을 원래의 xlsm으로 바꾼다.

VBA로_리본메뉴에_탭_버튼추가하기.zip => VBA로_리본메뉴에_탭_버튼추가하기.xlsm

 

이제 이 엑셀 매크로 파일을 열어보자. 홈탭 바로 다음에 “리본에 탭 추가” 탭이 추가되어 있을 것이다.

 

버튼을 클릭해 보면 다음과 같이 메시지가 나타난다.

위의 1)번에서 추가한 콜백 프로시저가 실행된 것이다. 단순히 메시지를 띄우는 대신 각자 필요한 코드를 콜백프로시저에 추가하면 된다.

 

이상으로 “VBA로 엑셀 리본메뉴에 사용자정의 탭,버튼 추가하기” 설명을 마친다.

구체적인 기능은 첨부의 실습용 파일을 참고하면 된다. 보안의 이유로 xlsm파일이 업로드가 안되므로 압축파일로 만들어서 업로드한다. 다운로드 후 압축을 풀어서 사용해야 한다.

실습용 엑셀매크로파일 다운로드 : VBA로_리본메뉴에_탭_버튼추가하기.zip

 

 

 

VBA로 엑셀 리본메뉴에 사용자정의 탭,버튼 추가하기에 1개의 응답

  1. 오 대단히 감사합니다.
    잘 되네요.
    많이 고민하고 구글링도 여러번 해봤는데
    이렇게 잘 정리해주셔서 쉽게 이해했고 적용했습니다.

    다시한번 감사드립니다.

댓글 남기기

이메일은 공개되지 않습니다.