Excel實戰技巧60: 自定義功能區
- 2019 年 11 月 12 日
- 筆記
自Office 2007版本開始,Microsoft對Office介面進行了徹底的改造,將原來的菜單和工具欄改成了功能區,文件格式也進行了改變。現在的Office文件,實際上是一個壓縮文件,其中包括了創建文檔的XML文件。這樣,我們能夠通過修改其XML文件結構,從而創建自已的功能區。
將文件修改為壓縮文件
首先,需要修改Excel文件的擴展名為.zip,例如將文件MyCustomRibbon.xlsm修改為MyCustomRibbon.zip或者MyCustomRibbon.xlsm.zip,此時,會彈出一個如下圖1所示的警告資訊框,單擊「是」。

圖1
雙擊打開這個壓縮文件,可以看到如下圖2所示的文件夾和文件,我們需要在其中添加一些文件夾和文件,以及修改一些文件來自定義功能區。

圖2
創建自定義功能區
在壓縮文件外,創建一個新文件夾,我們將其命名為customUI。在該文件夾中,創建一個新的名為my_customUI.xml的文件。我們將在這個文件中創建XML,控制自定義功能區的介面外觀。
打開my_customUI.xml,在第一行輸入:
(對於Excel 2007和Excel 2010)
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
或者:
(對於Excel 2013及以後版本)
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
當然,第一條語句也適用於Excel 2010以後的版本,但在功能上有許多局限性。
在這個標籤中,xmlns代表XML名稱空間,「URL」不是指向實際的在線資源,而是指向Office內部程式碼中列出的架構,為諸如<ribbon>和<button>之類的標記賦予了含義,它們是框架的一部分。而在2013和更高版本中提供了其他功能,這些功能在早期版本的Excel中是不可用的。
接下來,添加選項卡,並在選項卡中添加帶有按鈕的組:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab id="mytab"label="我的選項卡"> <group id="group1" label="第一組"> <button id="button1" label="按鈕1" /> <button id="button2" label="按鈕2" /> </group> <group id="group2" label="第二組"> <button id="button3" label="按鈕3" /> <button id="button4" label="按鈕4" /> </group> </tab> </tabs> </ribbon></customUI>
上面的XML程式碼為我們的自定義功能區搭建了一個基本的框架。注意,每個控制項的id名必須唯一且沒有空格。
保存並關閉my_customUI.xml,將文件夾customUI拖拉到上文創建的壓縮文件夾中。
添加關聯關係
將壓縮文件中的_rels文件夾拖至壓縮文件外,使用記事本打開該文件夾裡面的.rels文件,在</Relationships>前添加:
(對於Excel 2007和Excel 2010)
<Relationship Id="my123" Type=http://schemas.microsoft.com/office/2006/relationships/ui/extensibility Target="/customUI/my_customUI.xml"/>
或者:(對於Excel 2013及以後版本)
<Relationship Id="my123" Type="http://schemas.microsoft.com/office/2007/relationships/ui/extensibility" Target="/customUI/my_customUI.xml"/>
其中,Target的值應該與自定義的xml文件的路徑相匹配。
保存並關閉這個.rels文件,刪除壓縮文件中的_rels文件夾,將修改後的_rels文件夾拖回到壓縮文件中。
將壓縮文件的擴展名修改回Excel文件的擴展名,打開Excel文件,可以看到添加了一個新的名為「我的選項卡」的選項卡,有兩個組,每組有兩個按鈕,如下圖3所示。

圖3
下面,為自定義功能區添加響應功能。
修改按鈕
主要介紹如何為按鈕添加影像並鏈接到宏。
再次修改Excel文件的擴展名為壓縮文件,將my_customUI.xml文件拖出壓縮文件並進行修改。
將:
<button id="button1" label="按鈕1" />
修改為:
<button id="button1" label="按鈕1" imageMso="HappyFace" size="large"/>
此時的自定義功能區效果如下圖4所示。

圖4
我們給按鈕指定了內置的影像並設置其大小。
也可以給按鈕添加自定義影像,此時應使用:
image="imageID"
但需要添加關聯關係並在Excel文件中包括影像。需要在customUI文件夾中創建兩個新文件夾:
1.文件夾images:用於包含自定義影像。
2.文件夾_rels:用於關聯。在此文件夾中添加一個文件,文件名為XML文件的名字(示例中是my_customUI.xml),後綴為.rels,因此其名字為:my_customUI.xml.rels。該文件告訴Excel怎樣識別想要放置在功能區中的影像,其程式碼類似如下:
<?xml version="1.0" encoding="utf-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="images/my_pic_filename.png" Id="my_icon_1" /><Relationship Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="images/my_2nd_pic_filename.png" Id="my_icon_2"/></Relationships>
示例中,在images文件夾中,放置了名為my_pic_filename.png和my_2nd_pic_filename.png的影像文件,如果想在按鈕中使用,則需要通過指定其ID來調用,例如my_icon_1:
<button id = "button4" label = "按鈕4" image = "my_icon_1" onAction = "sayGoodbye"/>
下面,我們為按鈕關聯宏,以便用戶單擊按鈕時響應相關功能。
將:
<button id="button1" label="按鈕1" imageMso="HappyFace" size="large"/>
修改為:
<button id="button1" label="按鈕1" imageMso="HappyFace" size="large" onAction="MyHello" />
使用更新後的文件替換掉壓縮文件中的相應文件後,恢復Excel擴展名,打開Excel文件,開啟VBE,在標準模組中輸入程式碼:
Sub MyHello(control As IRibbonControl) Dim yourName As String yourName = InputBox("請輸入你的名字:") MsgBox yourName & ", 歡迎你!"End Sub
此時,當你按下按鈕1時,會彈出一個輸入框要求輸入名字,在輸入完成後,會給出一句問候資訊。
小結
不藉助任何特定工具創建自定義功能區的步驟:
1.創建一個名為customUI的文件夾並在其中添加一個名為my_customUI.xml的文件。
2.在my_customUI.xml文件中輸入自定義功能區的XML程式碼。
3.修改Excel文件的擴展名為壓縮文件。
4.將壓縮文件中的_rels文件夾複製並粘貼到壓縮文件外。
5.修改_rels文件夾中的.rels文件建立關聯關係並保存。
6.刪除壓縮文件中的_rels文件夾。
7.將修改後的_rels文件夾和新建的文件夾customUI拖至壓縮文件中。
8.將壓縮文件擴展名恢復成Excel文件擴展名。
9.在VBE中編寫相關控制項的回調程式碼,注意過程名後帶有相應的回調參數。
本文雖然以Excel為示例來講解,但同樣的原理也可以運用到Word和PowerPoint中。此外,你也可以藉助於特殊的工具(例如CustomUIEditor)更方便來自定義功能區。