自定义控件功能RibbonX(控件自定义功能多个显示)「自定义控件有」

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.shtml5 使用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 ExplicitPublic Const AppName As String = \"进销存管理系统\"IV “进货”组中有两个按钮,用来操作进货录入和进化报表两个功能,具体的代码如下:Sub btIN_INPUT_onAction(Control As IRibbonControl) '进货录入Sheets(\"供货单\").Select '选择\"供货单\"工作表Range(\"b5\").Select '选择B5单元格End SubSub 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.0http://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-
自定义控件功能RibbonX(控件自定义功能多个显示)
(图片来源网络,侵删)

联系我们

在线咨询:点击这里给我发消息