优秀的编程知识分享平台

网站首页 > 技术文章 正文

Excel2007|RibbonX控件 & 自定义功能区

nanyue 2024-07-26 15:48:50 技术文章 4 ℃

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属性执行控件在应用程序代码中定义的操作。

回调相关的控件描述
getContentdynamicMenu定义控件的内容。
getDescription多个控件获取控件的描述。
getEnabled多个控件让代码启用或禁用控件。
getImage多个控件获取为控件提供的自定义图像。
getImageMso多个控件获取为控件定义的标准图像。
getItemCountcomboBox,DropDown,gallery获取控件的项目列表中的项目数。
getItemHeightgallery以像素为单位确定项目显示在屏幕中的高度。
getItemIDcomboBox,dropDown,gallery确定当前项目的ID。
getItemImagecomboBox,dropDown,gallery获取与当前项目相关的图像。
getItemLabelcomboBox,dropDown,gallery获取与当前项目相关的标签。
getItemScreenTipcomboBox,dropDown,gallery获取与当前项目相关的屏幕提示。
getItemSuperTipcomboBox,dropDown,gallery获取与当前项目相关的超级提示。
getItemWidthgallery以像素为单位确定项目显示在屏幕中的宽度。
getKeytip多个控件获取控件的键提示(加速键)。
getLabel多个控件获取控件的标签。
getPressedcheckBox,toggleButton确定用户是否以手动的方式单击了控件以激活该控件。
getScreentip多个控件获取控件的屏幕提示。
getSelectedItemIndexdropDown,gallery确定用户从列表中选取的项目。
getSelectItemIDgallery获取用户已经在列表中选取的项目的ID。
getShowImagebutton确定控件是否显示图像(允许禁止图像,即便已经为控件定义了图像)。
getShowLabelbutton确定控件是否显示标签(允许禁止标签,即便已经为控件定义了标签)。
getSize多个控件基于应用程序的输出,定义控件的大小。
getSupertip多个控件获取控件的超级工具提示。
getTextcomboxBox,editBox获取与列表中当前所选择的项目相关的文本。
getTitlemenuSeparator为指定的控件提供标题。Office显示文本来代替通常显示的水平线。
getVisiblebutton确定是否控件可见。
LoadImagecustomUI作为整体装载与用户界面相关的图像。
onAction多个控件执行控件在应用程序代码中定义的操作。
onChangecomboBox,editBox在用户选择或控件内容中发现变化。
onLoadcustomUI在装载过程中执行指定的操作。

参考: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-

最近发表
标签列表