(图片来源网络,侵删)
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-
0 评论