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)更方便來自定義功能區。