1976s
이 블로그는 웹 개발, 프로그래밍, IT 활용법을 다루며, 실용적인 팁과 정보를 제공합니다.
-
recentPost
-
popularPost
-
Archive
-
recentComment
기억의문서
Excel VBA 추가기능 - 리본 메뉴 만들기
엑셀에서 추가기능 (Add-in, xlsm)으로 저장한 파일에서, 커스텀 리본 메뉴를 만들 수 있습니다.
XML을 이용해서 수작업으로 하는 방법도 있지만, 만들어진 Editor(Office RibbonX Editor)가 있으므로 이를 이용해서 활용하는 법에 대해서 알아보겠습니다.
https://github.com/fernandreu/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 - GitHub - fernandreu/office-ribbonx-editor: An overhauled fork of the original Custom UI Editor for Microso...
github.com
install 파일을 다운하면 설치해 줍니다.
Office RibbonX Editor
테스트로 .xlsm파일을 하나 만들고 저장합니다. (Ex : 1.xlsm)
로드한 1.xlsm 파일에서 마우스 오른쪽을 누르면 나오는 메뉴에 Insert Office 2010+ Custom UI Park를 눌러 XML을 만듭니다.
만들어진 xml를 눌러 만들 UI를 입력하시면 됩니다.
리본 XML 소스 추가
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="CustomTab" label="My Tab">
<group id="SimpleControls" label="My Group">
<button id="Button1" imageMso="HappyFace" size="large"
label="Large Button"
screentip="my long description"
onAction="MyMacro"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
위의 예제를 이용하면 만들어 봅니다.
약간의 설명
<ribbon> : 이 ribbon에서 XML의 startFromScratch 속성을 false로 설정하면 Access는 기존 탭을 모두 그대로 유지하고 오른쪽에 새 탭을 추가할 수 있습니다. 이 속성을 true로 설정하면 기존 탭은 모두 제거되고 XML에서 만든 탭만 표시됩니다. (대소문자 구분합니다.)
기본 지식
- XML은 대소문자를 구분한다. (반드시 대소문자를 구분하여 사용하길 바랍니다.)
- 『2009/07』은 『2006/01』로 변경하여 사용해야 한다. (의문 - 추후)
- ribbon startFromScratch의false는 기존tab이 보이고true는 작성한ribbon만 보인다.
- id="customTab"와 같이 『=』뒤에 오는 값은 반드시 겹따옴표(“)로 묶어 줘야 한다.
- id의 첫 글자는 반드시 문자여야 한다.
- id는 중복되어서는 안된다. (다른 그룹이라도 중복 되어서는 안된다.)
- label이 한글이라면 반드시 상단에 『<?xml version="1.0" encoding="utf-8"?>』을 해줘야 한다.
- imageMso는Office내장 이미지를 의미한다.
- Image는 사용자가 지정한 이미지를 의미한다.
- Image의 크기는size="normal":보통, size="large"큰이미지로 구분한다.
- onAction="Callback"은 엑셀에서 실행된 프로시저(Callback )를 말한다.
추가
Ribbon에 사용되는 컨트롤들은 생각보다 많습니다.여러 가지가 있겠지만..
빈번히 사용되는 것을 소개 드리면..
button, checkBox, editBox, comboBox, dropDown, toggleButton, gallery, splitButton, labelControl, menu, pictures, buttonGroup, box, splitButton
이정도가 됩니다.
<tab> 홈, 파일, 데이터 등 맨 위에 보이는 메뉴에 대한 설정입니다. ①
<group> 탭 내에서 세로 라인(|)으로 구분되는 모임입니다. ②
<button> 그룹내 하나의 버튼입니다. ③
- ID : 겹치지 않도록
- label : 원하는 이름
- imageMso : 버튼 이미지 형태를 설정합니다. 여기서 확인
- screentip : 마우스를 올려놓았을 때 설명
- onAction
- 해당 버튼을 클릭했을 때 실행되는 VB Script Sub 이름을 적어주시면 됩니다. (onAction="MyMacro")
- visible : 보이고/안보이고 visible="false"
onAction
위에서도 설명 했듯이 onAction은 버튼을 클릭했을 때 실행하는 VB Script Sub를 만들어 주어야 합니다.
Office RibbonX Editor의 상단 메뉴에 'Generate Callbacks'를 눌러 VBA소스을 저장해둡니다.
'Callback for Button1 onAction
Sub MyMacro(control As IRibbonControl)
End Sub
엑셀 Tab메뉴에 개발도구로 들어가면 새창에서 모듈을 추가하고 MyMacro을 만들어 있어야 작동 됩니다.
테스트를 위해 MsgBox "웃는 얼굴"을 넣어 버튼을 눌러 봅니다.
정상 작동 된것을 보실수 있습니다.
참고사항
위치 지정
새롭게 만드는 Tab의 위치를 지정할수 있습니다. 예제로 빈집을 하나 만들겠습니다.
<customUI xmlns='http://schemas.microsoft.com/office/2006/01/customui'>
<ribbon>
<tabs>
<tab id="MyTab"
label="Exceller's Tab"
insertBeforeMso="TabHome">
</tab>
</tabs>
</ribbon>
</customUI>
위 예제의
insertBeforeMso="TabHome"
위의 문구가 TabHome(홈) 앞에 넣어라 라는 명령어입니다.
당연히 밑에것은 뒤에 넣어라 입니다.
insertAfterMso="TabHome"
참고로 밑의 표는 기존의 tab 이름입니다.
Tab Name | 2007 활성화된 Group | 2010 활성화된 Group |
Group | Group | |
Office Menu | FileSaveAsMenu | |
FilePrintMenu | ||
FilePrepareMenu | ||
FileSendMenu | ||
MenuPublish | ||
FileServerTasksMenu | ||
TabHome | GroupClipboard | GroupClipboard |
GroupFont | GroupFont | |
GroupAlignmentExcel | GroupAlignmentExcel | |
GroupNumber | GroupNumber | |
GroupStyles | GroupStyles | |
GroupCells | GroupCells | |
GroupEditingExcel | GroupEditingExcel | |
TabInsert | GroupInsertTablesExcel | GroupInsertTablesExcel |
GroupInsertIllustrations | GroupInsertIllustrations | |
GroupInsertChartsExcel | GroupInsertChartsExcel | |
GroupSparklinesInsert | ||
GroupSlicerInsert | ||
GroupInsertLinks | GroupInsertLinks | |
GroupInsertText | GroupInsertText | |
GroupInsertSymbols | ||
GroupInsertBarcode | GroupInsertBarcode | |
TabPageLayoutExcel | GroupThemesExcel | GroupThemesExcel |
GroupPageSetup | GroupPageSetup | |
GroupPageLayoutScaleToFit | GroupPageLayoutScaleToFit | |
GroupPageLayoutSheetOptions | GroupPageLayoutSheetOptions | |
GroupArrange | GroupArrange | |
TabFormulas | GroupFunctionLibrary | GroupFunctionLibrary |
GroupNamedCells | GroupNamedCells | |
GroupFormulaAuditing | GroupFormulaAuditing | |
GroupCalculation | GroupCalculation | |
TabData | GroupGetExternalData | GroupGetExternalData |
GroupConnections | GroupConnections | |
GroupSortFilter | GroupSortFilter | |
GroupDataTools | GroupDataTools | |
GroupOutline | GroupOutline | |
TabReview | GroupProofing | GroupProofing |
GroupLanguage | ||
GroupComments | GroupComments | |
GroupChangesExcel | GroupChangesExcel | |
GroupInk | GroupInk | |
TabView | GroupWorkbookViews | GroupWorkbookViews |
GroupViewShowHide | GroupViewShowHide | |
GroupZoom | GroupZoom | |
GroupWindow | GroupWindow | |
GroupMacros | GroupMacros | |
TabDeveloper | GroupCode | GroupCode |
GroupAddins | ||
GroupControls | GroupControls | |
GroupXml | GroupXml | |
GroupModify | GroupModify |
마치며
오늘 막 시작해서 공부한 내용입니다. 모르는 것도 많아 배워가며 하려니 쉽지는 않네요. 이번에 만들려고 생각하는 부분에서 이 것이 필요할 것 같아 미리 공부해 봅니다.
참조 링크
- https://github.com/fernandreu/office-ribbonx-editor
- https://support.microsoft.com/en-gb/office/create-a-custom-ribbon-in-access-45e110b9-531c-46ed-ab3a-4e25bc9413de
- https://bettersolutions.com/vba/ribbon/document-level-customui-editor.htm
- http://www.spreadsheet1.com/how-to-use-imagemso-icons-in-excel.html
- https://www.spreadsheet1.com/office-excel-ribbon-imagemso-icons-gallery-page-01.html
- https://learn.microsoft.com/en-us/previous-versions/office/developer/office-2007/aa338199(v=office.12)?redirectedfrom=MSDN