在前面的一系列关于RibbonX的介绍中,我们一起认识了Office 2007的功能区界面,了解了RibbonX开发的基础知识,介绍了一些有用的资源,并重点讲解了RibbonX开发的工具以及步骤,关键的XML知识和回调基础。下面,我们以问答的形式对前面的一些主要知识进行小结。
问题1 没有任何第三方工具,我如何创建自定义的选项卡?
如果有第三方工具辅助,例如Custom UI Editor,那么自定义功能区是很方便的。不过没有也不要紧,只是稍微复杂一点罢了。
步骤1 打开Excel,输入数据后,使用xlsm扩展名保存该文件。
确保使用xlsm扩展名保存Excel文件,否则Excel会去除包含宏的文件。
步骤2 关闭Excel,然后在Windows中打开保存该文件的文件夹。
步骤3 在该文件夹中创建一个名为customUI的新文件夹。
步骤4 在这个新文件夹中添加一个名为customUI.xml的新文本文件。记住,该文本文件的扩展名为xml。
在customUI.xml文件中添加自定义选项卡的XML代码:
<?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes” ?>
<customUI xmlns=”http://schemas.microsoft.com/office/2006/01/customui”>
<ribbon>
<tabs>
<tab id=”myTab” label=”我的选项卡” keytip=”MT”>
</tab>
</tabs>
</ribbon>
</customUI>
说明:上述代码中有一个keytip属性,代表用户按Alt键时选项卡出现的提示键,即用户按Alt+MT键就可以选择自定义的选项卡。在定义提示键时,选择的字符应避免与相同级别已有的提示键相冲突,例如,每个选项卡必须有唯一的提示键,然而其中的控件可以与选项卡有相同的提示键,只要它不与其它控件的提示键相同。
步骤5 将刚创建的Excel文件的扩展名改为ZIP。
步骤6 从ZIP文件中提取_rels文件夹,并修改其中的.rels文件,用于告诉Excel存在customUI.xml文件。在.rels文件中添加下面的代码:
<Relationship Id=”rId4″ Type=”http://schemas.microsoft.com/office/2006/relationships/ui/extensibility” Target=”customUI/customUI.xml” />
必须提供唯一的Id属性值。Type属性必须指向自定义用户界面扩展的架构,因此使用如代码中显示的URL。Target属性指向自定义文件的位置。
步骤7 将_rels文件夹放回到ZIP文件中。
步骤8 将customUI文件夹放到ZIP文件中。
步骤9 将ZIP文件的扩展名修改回Excel的扩展名。
此时,打开Excel文件后,将看到如下图1所示的自定义选项卡。该选项卡是空的,因为我们还没有在其中添加任何的组。注意,该选项卡显示了MT提示键。
图1:添加空白选项卡
问题2 如何在选项卡中添加组?
在上文中,我们已经创建了一个新的选项卡。那么,在该选项卡中添加组也是相当容易的,只需要修改customUI.xml文件。此时,首先应该设计好布局,然后再添加相应的VBA代码。
下面是修改后在customUI.xml文件中添加的xml代码:
<tab id=”myTab” label=”我的选项卡” keytip=”MT”>
<group id=”Default” label=”默认组“>
</group>
<group id=”SeparatorGroup” label=”使用分隔条的组“>
<separator id=”SeparatorItem” visible=”true” />
</group>
<group id=”DialogBoxLaunch” label=”使用对话框启动器的组“>
<dialogBoxLauncher>
<button id=”LaunchDialog”
screentip=”对话框启动器“
supertip=”单击此按钮通常会显示一个对话框.”
keytip=”LD” />
</dialogBoxLauncher>
</group>
</tab>
上述代码在选项卡中添加了三个组。按上文所述步骤,将修改后的customUI.xml文件替换ZIP文件夹中原来的customUI.xml文件,然后将ZIP文件扩展名修改回xlsm扩展名,打开Excel文件,结果如下图2所示。
图2:添加了三个组的选项卡
下面我们对上述代码进行简单的说明。
上述代码以标准的组开始,没有包括任何特定的功能。通常,可以在<group>和</group>标签之间放置控件。组能够使用下列属性:
l image(添加图像到组中)
l imageMso(添加内置图像到组中)
l keytip