Excel 2007 引入 RibbonX (Office Fluent UI) 技術,透過 XML 定義自訂標籤、群組、按鈕、下拉選單等 UI 元素,並對應 VBA 回呼程序。本文提供從零打造自訂功能區的完整實作流程:不僅介紹專業工具 Office Custom UI Editor,更獨家詳解 WinRAR 手動修改 .xlsm 封裝 的無工具替代方案,讓無法安裝工具的環境也能完成開發。
onAction 回呼名稱。Sub 回呼名稱(control As IRibbonControl))。customUI\customUI.xml 經由 _rels\.rels 關聯至工作簿。<customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="CustomTab" label="My Tab">
<group id="SampleGroup" label="Company Name">
<button id="BtnInsert" label="Insert Company Name" size="large" onAction="InsertCompanyName"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
另存為 customUI.xml → 放入資料夾 customUI(資料夾名固定)。
VBA 模組:
Sub InsertCompanyName(control As IRibbonControl)
If TypeName(Selection) <> "Range" Then Exit Sub
Selection.Value = "Microsoft Corporation"
End Sub

RibbonSample.xlsm,匯入上述 VBA 模組,儲存關閉。RibbonSample.xlsm.zip。customUI 資料夾拖入壓縮包根目錄。.xlsm。
_rels\.rels 到桌面。<Relationships> 內新增關聯:<Relationship Id="rIdCustomUI" Type="https://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml"/>
_rels\.rels。| 元素 | 屬性範例 | 用途 |
|---|---|---|
| tab | id, label, insertAfterMso, insertBeforeMso | 頂層標籤 |
| group | id, label, autoScale | 標籤內分組 |
| button | id, label, imageMso, size, onAction, getEnabled | 按鈕(大/小/圖示) |
| toggleButton | id, label, onAction, getPressed | 切換按鈕 |
| comboBox | id, label, onChange, getItemCount, getItemLabel | 下拉輸入框 |
| dropDown | id, label, onAction, getItemCount, getItemLabel | 純下拉選單 |
| gallery | id, label, columns, rows, getItemCount, getItemImage, getItemLabel | 圖庫選擇器 |
| menu | id, label, itemSize | 下拉選單容器 |
%TEMP%\CustomUI_Errors.log。?InsertCompanyName(Nothing) 測試。imageMso 內建圖示(如 ImageMso="HappyFace")或 getImage 回呼動態載入。