Excel2007中,功能区替代了以前的分层菜单、工具栏和任务窗格系统。功能区具有更简单的界面系统,通过优化提高了效率和易发现性。功能区改进了上下文菜单、屏幕提示、浮动工具栏以及键盘快捷方式,从而提高了用户的操作效率。
此外,还可以使用功能区扩展性(RibbonX)改善用户体验。可以使用可扩展标记语言(XML)和几种传统的编程语言之一来操纵构成功能区的组件。
有Excel2007中提供了上千个RibbonX控件,不能使用VBA代码从功能区添加或删除RibbonX控件,只能通过编写XML代码来完成定制RibbonX的工作,且必须将该XML代码包含到工作簿文件中,以达到定制RibbonX的目的。
1 RibbonX容器控件
容器控件可以包含其他控件,通过嵌套容器控件在其他容器里,可以创建层次结构。
容器控件 | XML标识 | 功能 |
选项卡 | <tab> | 功能区被分为多个选项卡 |
组 | <group> | 每个选项卡分为多个组 |
盒子控件 | <box> | 按钮布局(不显示任何外观) |
按钮组 | <buttonGroup> | 控件布局(带有边框和分隔条) |
复合框 | <comboBox> | 编辑框+下拉列表 |
下拉控件 | <dropDown> | 编辑框+下拉列表+按钮控件 |
分离按钮 | <splitButton> | 按钮+菜单项(按钮可执行默认动作) |
菜单 | <menu> | 按钮+菜单项(按钮不能执行默认动作) |
2 RibbonX基本控件
RibbonX基本控件可以添加到自定义组中或者可以包含在其他容器控件中,常用的基本控件如下图所示:
基本控件 | XML标识 | 功能 |
标签 | <labelcontrol> | 文字提示信息,不响应用户动作 |
复选框 | <checkbox> | 切换状态,常用于控制UI控件是否可见 |
分隔条 | <separator> | 在任何控件组里提供分隔元素。 |
按钮 | <button> | 可带图标和标题,能接收用户的单击并调用VBA过程 |
切换按钮 | <toggleButton> | 每次单击时在按下与非按下之间切换 |
编辑框 | <editBox> | 可接受用户输入 |
下拉库列表 | <gallery> | 下拉控件中包含的控件 |
列表项 | <item> | 组合框中包含的控件 |
3 RibbonX控件常用属性
每个控件都有很多的属性,可在XML中使用这些属性修改控件的外观。
属性类别 | 属性 | 描述 |
ID类 | id | 为自定义控件指定标识符。不能与idMso或idQ属性一起使用。 |
idMso | 为内置控件指定标识符。不能与id或idQ属性一起使用。 | |
idQ | 为限定的控件指定标识符(限定的控件取决于定义的自定义命名空间)。不能与id或idMso属性一起使用。 | |
图像类 | image | 定义控件使用的自定义图像的名称。 |
imageMso | 定义控件使用的内置图像的名称。 | |
showImage | 确定Office是否显示与控件项相关的图像。可以选择true或false。 | |
插入类 | insertAfterMso | 基于内置控件的位置,标识新控件的位置。 |
insertAfterQ | 基于限定的控件的位置,标识新控件的位置。 | |
insertBeforeMso | 基于内置控件的位置,标识新控件的位置。 | |
insertBeforeQ | 基于限定的控件的位置,标识新控件的位置。 | |
外观类 | itemSize | 确定菜单或其它控件项的大小。可以选择large和normal。 |
label | 指定控件显示的文本。 | |
screenTip | 提供简要的提示,帮助用户理解控件的用途。 | |
size | 确定控件的大小。可以选择large或normal。 | |
sizeString | 设置控件的大小来包含指定宽度的字符串。 | |
tag | 包含用户定义的数据,可以在应用程序中用来与控件或其它元素交互。 | |
title | 为menuSeparator控件指定显示的文本代替水平线。 | |
visible | 确定Office是否显示某控件或其它功能。可以选择true或false。 | |
其他 | description | 当菜单的itemSize属性设置为大时指定Office显示的描述文本。 |
enabled | 确定Office是否启用或禁用控件。可以选择true或false作为其值。 | |
keyTip | 对控件添加指定的加速键组合。当用户按下Alt键时显示键提示。可以指定任意键组合,使用1至3个字母。 | |
superTip | 提供详细的提示,帮助用户理解控件的用途。 | |
showItemImage | 确定Office是否显示与菜单或其它控件项相关的图像。可以选择true或false。 | |
showItemLabel | 确定Office是否显示与菜单或其它控件项相前的标签。可以选择true或false。 | |
showLabel | 确定Office是否显示与控件相关的标签。可以选择true或false。 |
4 RibbonX控件的回调函数
在自定义RibbonX时,可在XML中通过控件的不同属性设置控件,也可以使用控件的回调函数,在程序运行时动态修改控件的属性。Button控件可以通过其onAction属性执行控件在应用程序代码中定义的操作。
回调 | 相关的控件 | 描述 |
getContent | dynamicMenu | 定义控件的内容。 |
getDescription | 多个控件 | 获取控件的描述。 |
getEnabled | 多个控件 | 让代码启用或禁用控件。 |
getImage | 多个控件 | 获取为控件提供的自定义图像。 |
getImageMso | 多个控件 | 获取为控件定义的标准图像。 |
getItemCount | comboBox,DropDown,gallery | 获取控件的项目列表中的项目数。 |
getItemHeight | gallery | 以像素为单位确定项目显示在屏幕中的高度。 |
getItemID | comboBox,dropDown,gallery | 确定当前项目的ID。 |
getItemImage | comboBox,dropDown,gallery | 获取与当前项目相关的图像。 |
getItemLabel | comboBox,dropDown,gallery | 获取与当前项目相关的标签。 |
getItemScreenTip | comboBox,dropDown,gallery | 获取与当前项目相关的屏幕提示。 |
getItemSuperTip | comboBox,dropDown,gallery | 获取与当前项目相关的超级提示。 |
getItemWidth | gallery | 以像素为单位确定项目显示在屏幕中的宽度。 |
getKeytip | 多个控件 | 获取控件的键提示(加速键)。 |
getLabel | 多个控件 | 获取控件的标签。 |
getPressed | checkBox,toggleButton | 确定用户是否以手动的方式单击了控件以激活该控件。 |
getScreentip | 多个控件 | 获取控件的屏幕提示。 |
getSelectedItemIndex | dropDown,gallery | 确定用户从列表中选取的项目。 |
getSelectItemID | gallery | 获取用户已经在列表中选取的项目的ID。 |
getShowImage | button | 确定控件是否显示图像(允许禁止图像,即便已经为控件定义了图像)。 |
getShowLabel | button | 确定控件是否显示标签(允许禁止标签,即便已经为控件定义了标签)。 |
getSize | 多个控件 | 基于应用程序的输出,定义控件的大小。 |
getSupertip | 多个控件 | 获取控件的超级工具提示。 |
getText | comboxBox,editBox | 获取与列表中当前所选择的项目相关的文本。 |
getTitle | menuSeparator | 为指定的控件提供标题。Office显示文本来代替通常显示的水平线。 |
getVisible | button | 确定是否控件可见。 |
LoadImage | customUI | 作为整体装载与用户界面相关的图像。 |
onAction | 多个控件 | 执行控件在应用程序代码中定义的操作。 |
onChange | comboBox,editBox | 在用户选择或控件内容中发现变化。 |
onLoad | customUI | 在装载过程中执行指定的操作。 |
参考:http://www.360doc.com/content/09/1110/14/406571_8738506.shtml
5 使用XML代码手式方式自定义功能区
功能区可以通过使用XML代码进行精细设置。
5.1 新建一个项目文件夹,可以命名为“进销存管理系统”;
5.2 将之前设计的“进销存管理.xlsm"工作表保存到项目文件夹内;
5.3 在项目文件夹内新建一个“customUI”文件夹;
5.4 在“customUI”文件夹内新建“customUI.xml"文件,内容如下:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
‘↓创建新选项卡<tab id="tabJXC" label="进销存" >
<group id="gpIN" label="进货">
<button id="btIN_INPUT" imageMso="ReviewNextChange"
size="large" label="录入" onAction="btIN_INPUT_onAction"/>
<button id="btIN_REPROT" imageMso="RecordsMoreRecordsMenu"
size="large" label="报表" onAction="btIN_REPORT_onAction"/>
</group>
<group id="gpOUT" label="销售">
<button id="btOUT_INPUT" imageMso="ReviewPreviousChange"
size="large" label="录入" onAction="btOUT_INPUT_onAction"/>
<button id="btOUT_REPROT" imageMso="RecordsMoreRecordsMenu"
size="large" label="报表" onAction="btOUT_REPORT_onAction"/>
<button id="btOUT_RESULTS" imageMso="ControlLayoutStacked"
size="large" label="销售业绩" onAction="btOUT_RESULTS_onAction"/>
</group>
<group id="gpSTOCK" label="库存">
<button id="btSTOCK_FIND" imageMso="FileDocumentManagementInformation"
size="large" label="存货查询" onAction="btSTOCK_FIND_onAction"/>
<button id="btSTOCK_SUM" imageMso="AccessFormDatasheet"
size="large" label="存货统计" onAction="btSTOCK_SUM_onAction"/>
<button id="btSTOCK_DETAILS" imageMso="ControlLayoutTabular"
size="large" label="库存明细" onAction="btSTOCK_DETAILS_onAction"/>
</group>
<group id="gpDATA" label="数据">
<button id="btDATA_COMM" imageMso="SmartArtAddBullet"
size="large" label="商品信息" onAction="btDATA_COMM_onAction"/>
<button id="btDATA_SALES" imageMso="DistributionListUpdateMembers"
size="large" label="销售人员" onAction="btDATA_SALES_onAction"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
<customUI>元素是XML的根容器,名称集(namespace)将它识别作为RibbonX文档。
<ribbon>元素是一个联系到可见的Ribbon的所有变化的容器。<customUI>元素也可以包含一个<commands>元素,用来重复利用内置控件。
<tabs>元素是一个联系到Ribbon中现有的或新的选项卡的所有变化的容器。<ribbon>元素也能包含<officeMenu>、<aqt>和/或<contextualTabs>元素来控制Ribbon的相应部分。
<tab id="rxtabTest" labe="测试">元素用来创建自定义的选项卡。
<group id="myGroup" label="显示">元素用来创建一个组。
<button>元素添加一个按钮,该按钮显示名称为“工作表信息",当单击该按钮时执行工作簿中的showmsg宏,该宏需要在Excel的VBE中编写。
也可能通过以下代码不显示部分内置控件:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<commands>
<command idMso="FileNew" enabled="false" />
<command idMso="FileSaveAs" enabled="false" />
</commands>
<ribbon>
<tabs>
<tab idMso="TabHome" visible="false"/>
<tab idMso="TabInsert" visible="false"/>
<tab idMso="TabPageLayoutExcel" visible="false"/>
</tab>
</tabs>
</ribbon>
</customUI>
5.5 将Excel工作薄变成一个压缩文件文件:将“进销存管理.xlsm"重命名为“进销存管理.xlsm.zip"即可。
5.6 添加文件夹“customUI”到压缩文件“进销存管理.xlsm.zip":拖入即可,如下图所示:
5.7 在工作簿文件与xml文件建立关系:
在压缩文件的_rels文件夹内的.rles文件中添加以下内容(添加到最后一个Relationship标记前):
<Relationship Id="customUIRelID"
Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml"/>
5.8 保存并关闭.rles文件;
5.9 将压缩文件改回到工作簿:将“进销存管理.xlsm.zip"重命名为“进销存管理.xlsm"即可。
5.10 打开“进销存管理.xlsm”,即可看到如下自定义选项卡的工作界面:
6.11 设计功能区各按钮代码
I 按快捷键Alt+F11打开VBE环境;
II 增加一个标准模块:插入→模块;
III 定义一个全局变量:
Option Explicit
Public Const AppName As String = "进销存管理系统"
IV “进货”组中有两个按钮,用来操作进货录入和进化报表两个功能,具体的代码如下:
Sub btIN_INPUT_onAction(Control As IRibbonControl) '进货录入
Sheets("供货单").Select '选择"供货单"工作表
Range("b5").Select '选择B5单元格
End Sub
Sub btIN_REPORT_onAction(Control As IRibbonControl) '进货报报
Sheets("进货报表").Select '选择"进货报表"工作表
Range("C2").Select '选择C2单元格
End Sub
其它模块的按钮的代码按上述思想同样设置。
7 使用Office2007 CustomUIEditor定制自己的功能区
下载地址:http://openxmldebeloper.org/articles/CustomUIeditor.aspx
要先安装Microsoft.net Framework2.0
http://www.microsoft.com/downloads/details.aspx?familyid=0856eacb-4362-4b0d-8edd-aab15c5e04f5&displaylang=zh-cn
在该编辑器中打开一个excel2007文件(这里是一个可加载宏的xlsm文件,xlsx一样),然后点击Insert→Office 2007 Custom UI Part插入一个CustomUI.xml:
然后点击Insert→Sample XMl→Excel-A Custom Tab插入xml代码:
插入后显示如下,将第一行的2009/07改为2006/01,这是Excel2007的时间,而2009/07是Excel2010的时间。
然后保存,关闭程序。再打开Excel文件,出现自定义的Contoso选项卡,如下:
customUI.xml文件的xml代码如下:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="customTab" label="Contoso" insertAfterMso="TabHome">
<group idMso="GroupClipboard" />
<group idMso="GroupFont" />
<group id="customGroup" label="Contoso Tools">
<button id="customButton1" label="ConBold" size="large" onAction="conBoldSub" imageMso="Bold" />
<button id="customButton2" label="ConItalic" size="large" onAction="conItalicSub" imageMso="Italic" />
<button id="customButton3" label="ConUnderline" size="large" onAction="conUnderlineSub" imageMso="Underline" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
在Excel2013中,创建功能区选项卡的操作非常简单,用户可通过打开“Excel选项"对话框直接进行功能区选项卡和组的创建。
-End-