엑셀 리본 XML 참고 사항
엑셀 리본을 XML로 커스터마이징할 때 반드시 알아야 할 사항들을 정리했습니다.
1. XML 파일 작성 및 편집 방법
- RibbonX Editor 또는 텍스트 편집기 (메모장++, VS Code) 등을 사용하여 작성합니다.
- XML을 엑셀 파일에 적용하려면 매크로 사용 통합 문서 (.xlsm, .xlam) 형식이어야 합니다.
- XML 수정 후, 엑셀을 닫고 다시 열어야 변경 사항이 적용됩니다.
2. XML 기본 규칙
- <customUI> 태그는 반드시 포함해야 합니다.
- 모든 태그는 id 속성을 사용하여 고유하게 설정해야 합니다.
- label 속성을 사용하여 UI에 표시될 이름을 정의합니다.
- VBA 매크로와 연결하려면 onAction 속성을 사용합니다.
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="myTab" label="사용자 탭">
<group id="myGroup" label="기능 그룹">
<button id="myButton" label="버튼" onAction="myMacro"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
|
3. 리본 UI 적용 및 오류 해결
- 엑셀 파일을 .xlsm/.xlam 형식으로 저장해야 합니다.
- 리본 XML을 변경한 후에는 엑셀을 반드시 다시 실행해야 적용됩니다.
- onAction으로 연결한 VBA 매크로는 Public Sub로 선언해야 합니다.
Public Sub myMacro(control As IRibbonControl)
MsgBox "버튼 클릭됨!"
End Sub
|
- XML 오류가 발생하면 리본 UI가 보이지 않거나 엑셀이 오류를 표시합니다.
- → RibbonX Editor에서 "Validate" 기능을 사용해 오류를 확인하세요.
4. 주요 XML 속성 및 기능
속성
|
설명
|
예제
|
id
|
고유한 식별자
|
id="customButton"
|
label
|
리본 UI에 표시될 텍스트
|
label="실행 버튼"
|
imageMso
|
기본 제공 아이콘 지정
|
imageMso="Save"
|
onAction
|
VBA 매크로 연결
|
onAction="RunMacro"
|
getPressed
|
버튼의 토글 상태 반환
|
getPressed="GetToggleState"
|
onChange
|
사용자가 입력을 변경했을 때 실행될 매크로
|
onChange="TextChanged"
|
5. 리본 UI 요소별 특징
XML 요소
|
설명
|
예제
|
<button>
|
일반 버튼을 추가
|
<button id="btn1" label="클릭" onAction="ClickMacro"/>
|
<toggleButton>
|
켜고 끌 수 있는 버튼
|
<toggleButton id="toggle" label="ON/OFF" getPressed="GetState" onAction="ToggleMacro"/>
|
<menu>
|
여러 버튼을 포함하는 드롭다운 메뉴
|
<menu id="menu1" label="메뉴">
|
<splitButton>
|
기본 버튼 + 추가 메뉴 제공
|
<splitButton id="split1">
|
<editBox>
|
사용자가 입력할 수 있는 텍스트 상자
|
<editBox id="inputBox" label="입력" onChange="TextChanged"/>
|
<comboBox>
|
선택 가능한 목록 (드롭다운)
|
<comboBox id="combo1" label="옵션 선택">
|
<gallery>
|
아이콘을 선택하는 갤러리 메뉴
|
<gallery id="gallery1" label="선택">
|
6. VBA에서 리본 컨트롤 상태 변경하기
- VBA에서 리본의 버튼 상태를 변경하려면 IRibbonUI 개체를 사용해야 합니다.
- 엑셀 시작 시 onLoad을 이용해 IRibbonUI 개체를 저장해야 합니다.
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="myTab" label="사용자 탭">
<group id="myGroup" label="기능 그룹">
<button id="myButton" label="변경 버튼" onAction="myMacro"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
|
Dim gRibbon As IRibbonUI ' 리본 UI 개체 저장
Public Sub RibbonLoaded(ribbon As IRibbonUI)
Set gRibbon = ribbon
End Sub
Public Sub myMacro(control As IRibbonControl)
MsgBox "버튼이 클릭되었습니다!"
gRibbon.Invalidate ' UI 새로고침
End Sub
|
- Invalidate 메서드를 사용하면 리본 UI가 새로고침됩니다.
- onLoad="RibbonLoaded" 속성을 추가해야 합니다.
7. 리본 커스터마이징 팁
✔ Office 기본 아이콘 사용하기 (imageMso)
- "Save", "Cut", "Copy", "Paste" 등 Microsoft에서 제공하는 아이콘을 사용할 수 있습니다.
- 아이콘 목록: 공식 문서 참고
✔ VBA에서 리본 UI 동적으로 변경
- gRibbon.Invalidate를 사용하면 버튼 상태를 변경할 수 있습니다.
- getPressed, getLabel을 활용하여 동적 UI 변경이 가능합니다.
✔ 리본 XML에서 VBA 매크로 오류 방지
- Public Sub로 선언해야 합니다.
- control As IRibbonControl 매개변수를 포함해야 합니다.
- vba
- Public Sub MyMacro(control As IRibbonControl)
✔ 리본 변경 사항을 적용하려면 엑셀을 다시 열기
- XML을 변경해도 엑셀을 다시 실행해야만 적용됩니다.
8. 자주 발생하는 오류 및 해결 방법
오류
|
원인
|
해결 방법
|
리본이 표시되지 않음
|
XML 코드에 오류가 있음
|
RibbonX Editor에서 검증
|
버튼 클릭 시 VBA 오류
|
onAction에 연결된 매크로가 없음
|
Public Sub MacroName(control As IRibbonControl) 형식 확인
|
아이콘이 안 보임
|
imageMso 이름이 잘못됨
|
|
XML 변경 후 적용 안 됨
|
엑셀을 다시 열지 않음
|
엑셀을 닫고 다시 열기
|
9. 결론
- 엑셀 리본 XML을 활용하면 UI를 자유롭게 커스터마이징 가능합니다.
- VBA와 결합하여 동적인 기능을 추가할 수 있습니다.
- onAction과 Invalidate를 활용하면 인터랙티브 UI 구현 가능합니다.
이제 XML을 활용하여 원하는 엑셀 리본을 직접 만들 수 있습니다! 🚀
추가 질문이 있으면 언제든지 문의하세요. 😊