ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: jiulongpo

[分享] 细品RibbonX(1-59) (转)

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-27 18:47 | 显示全部楼层
本帖已被收录到知识树中,索引项:UI界面定制
本帖最后由 jiulongpo 于 2012-8-6 20:42 编辑

转自: http://www.excelperfect.com/index.php/2009/10/23/ribbonxstudy27/
细品RibbonX(27):menu控件详解



菜单提供给用户可供从中选取的预定义选项列表,与dropDown控件一样,能够组合图像和文本。
表面上,菜单的用途与下拉控件的用途非常相似。然而,下拉控件的一个主要局限是仅能包含“项目”,而菜单控件可以包含各种各样的其它控件,包括按钮、复选框、库、甚至是另一个菜单。此外,下拉控件的默认显示是一个空框,而菜单可以设置一张“脸”,而不会依赖出现在其列表中的实际项目,因此菜单控件能够给人良好的印象。
1menu元素必需的属性
菜单控件需要下表1所列的id属性之一。
表1:menu元素必需的属性
属性
何时使用
id
当创建自已的菜单时
idMso
当使用现有的Microsoft菜单时
idQ
当在命名空间之间创建共享的菜单时

2、带有回调签名的可选的静态属性和动态属性
菜单控件可以使用下表2列出的任一insert属性。
表2:menu元素可选的insert属性
INSERT属性
允许值
默认值
何时使用
insertAfterMso
有效的Mso组
在组末尾插入
在Microsoft控件之后插入
insertBeforeMso
有效的Mso组
在组末尾插入
在Microsoft控件之前插入
insertAfterQ
有效的组idQ
在组末尾插入
在共享的命名空间控件之后插入
insertBeforeQ
有效的组idQ
在组末尾插入
在共享的命名空间控件之前插入

也可以为菜单控件设置下表3所列的任何静态属性或等价的动态属性。
表3:menu元素可选的属性和回调
静态属性
动态属性
允许值
默认值
动态属性的VBA回调签名
description
getDescription
1至1024个字符
(none)
Sub GetDescription(control As IRibbonControl,ByRef returnedVal)
enabled
getEnabled
true,false,1,0
true
Sub GetEnabled(control As IRibbonControl,ByRef returnedVal)
image
getImage
1至1024个字符
(none)
Sub GetImage(control As                                              IRibbonControl,ByRef returnedVal)
imageMso
getImage
1至1024个字符
(none)
同上
itemSize
(none)
normal,large
normal
(none)
keytip
getKeytip
1至3个字符
(none)
Sub GetKeytip(control As IRibbonControl,ByRef returnedVal)
label
getLabel
1至1024个字符
(none)
Sub GetLabel(control AsIRibbonControl,ByRef returnedVal)
screentip
getScreentip
1至1024个字符
(none)
Sub GetScreentip(control As IRibbonControl,ByRef returnedVal)
showImage
getShowImage
true,false,1,0
true
Sub GetShowImage(control As IRibbonControl,ByRef returnedVal)
showLabel
getShowLabel
true,false,1,0
true
Sub GetShowLabel(control As IRibbonControl,ByRef returnedVal)
size
getSize
normal,large
normal
Sub GetSize(control As IRibbonControl,ByRef returnedVal)
supertip
getSupertip
1至1024个字符
(none)
Sub GetSupertip(control As IRibbonControl,ByRef returnedVal)
tag
(none)
1至1024个字符
(none)
(none)
visible
getVisible
true,false,1,0
true
Sub GetVisible(control As IRibbonControl,ByRef returnedVal)

3menu元素允许的子对象
menu元素接受下列子对象的任意组合:
n         button
n         checkbox
n         control
n         dynamicMenu
n         gallery
n         menu
n         menuSeparator
n         splitButton
n         toggleButton
4menu元素的父对象
在下列任何控件内都能放置menu控件:
n         box
n         buttonGroup
n         dynamicMenu
n         group
n         menu
n         officeMenu
n         splitButton
5、使用内置的菜单控件
(1)创建一个新的.xlsx文件,并将其保存为Excel Built In menu Example.xlsx。
(2)关闭该文件并在CustomUI Editor中打开。
(3)输入下列XML代码:
<customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>
    <ribbon startFromScratch=“false“>
        <tabs>
            <tab id=“txtabDemo“
                 label=“Demo“
                 insertBeforeMso=“TabHome“>
                 <group id=“rxgrpDemo“
                        label=“Demo“>
                        <menu idMso=“FilePrepareMenu“
                              size=“large“/>
                 </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>
下图为上述代码创建的组。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-27 18:48 | 显示全部楼层
本帖最后由 jiulongpo 于 2012-8-7 20:33 编辑

接 细品RibbonX(27):menu控件详解


6、创建自定义菜单控件
本例中,创建一个菜单,包含一些有用的网站链接,并且将在名为“Ribbon Help”且放置在“开发工具”选项卡末尾的自定义组中包含该菜单。
(1)新建一个工作簿,以.xlsm为扩展名保存后关闭。
(2)在CustomUI Editor中打开该工作簿,并输入下列XML代码:
  1. <customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>

  2.     <ribbon startFromScratch=“false“>

  3.         <tabs>

  4.             <tab idMso=“TabDeveloper“>

  5.                 <group id=“rxgrpRibbonHelp“

  6.                        label=“Ribbon Help“>

  7.                        <menu id=“munResources“

  8.                              imageMso=“HyperlinkInsert“

  9.                              size=“large“

  10.                              label=“Useful Links“>

  11.                              <menuSeparator id=“rxmSepRibbon“

  12.                                             title=“RibbonX Resources“/>

  13.                              <button id=“rxbtnMSDN“

  14.                                      label=“MSDN Ribbon Developer Centre“

  15.                                      onAction=“rxsharedLinks_click“

  16.                                      tag=“http://msdn2.microsoft.com/en-us/office/aa905530.aspx“/>

  17.                              <button id=“rxbtnKenPuls“

  18.                                      label=“The Ken Puls blog (Excel MVP)“

  19.                                      onAction=“rxsharedLinks_click“

  20.                                      tag=“http://www.excelguru.ca/blog/2006/12/01/ribbon-example-table-of-contents“/>

  21.                              <button id=“rxbtnRondeBruin“

  22.                                      label=“Ron deBruin’s Site (Excel MVP)“

  23.                                      onAction=“rxsharedLinks_click“

  24.                                      tag=“http://www.rondebruin.nl/ribbon.htm“/>

  25.                              <button id=“rxbtnAccessFreak“

  26.                                      label=“Access Freak (Access MVP)“

  27.                                      onAction=“rxsharedLinks_click“

  28.                                      tag=“http://www.access-freak.com“/>

  29.                              <button id=“rxbtnPatrickSchmid“

  30.                                      label=“Patrick Schmid’s RibbonX Forum“

  31.                                      onAction=“rxsharedLinks_click“

  32.                                      tag=“http://pschmid.net/office2007/forums“/>

  33.                                      <menuSeparator id=“rxmSepAuthors“

  34.                                           title=“Authors Sites“/>

  35.                                      <button id=“rxbtnAuthorRobertMartin“

  36.                                              label=“Robert Martin“

  37.                                              onAction=“rxsharedLinks_click“

  38.                                              tag=“http://www.msofficegurus.com“/>

  39.                                      <button id=“rxbtnAuthorKenPuls“

  40.                                              label=“Ken Puls“

  41.                                              onAction=“rxsharedLinks_click“

  42.                                              tag=“http://www.excelguru.ca/“/>

  43.                                      <button id=“rxbtnAuthorTeresaHenning“

  44.                                              label=“Teresa Henning“

  45.                                              onAction=“rxsharedLinks_click“

  46.                                              tag=“http://www.DataDyanmicsNW.com/“/>

  47.                                      <button id=“rxbtnExcelPerfect“

  48.                                              label=“Excel Perfect“

  49.                                              onAction=“rxsharedLinks_click“

  50.                                              tag=“http://www.excelperfect.com/“/>

  51.                       </menu>

  52.                   </group>

  53.             </tab>

  54.         </tabs>

  55.     </ribbon>

  56. </customUI>

复制代码

代码创建了一个菜单,列出了九个网站。menuSeparator有效地将这些网站分成了两组。
注意,我们为每个menu控件使用了相同的回调,这使得VBA代码非常简洁。同时,我们将实际的URLs存储在tag属性中。
(3)生成回调签名,并复制代码后关闭CustomUI Editor。
(4)在Excel中打开该工作簿,打开VBE并将回调签名代码粘贴到一个标准模块中。下面编辑该回调以响应希望的操作。
‘rxbtnMSDN onAction回调
Sub rxsharedLinks_click(control As IRibbonControl)
    ActiveWorkbook.FollowHyperlink Address:=control.Tag, NewWindow:=True
End Sub
代码在新的Web窗口中启动链接。当触发回调时,control对象被传递到过程。该对象具有三个属性:context,id,tag。回调通常查询该控件的ID并相应地作出响应,但在本例中,查询标签,因为标签中存储了URL。接着链接被提供给单击的控件,启动合适的链接。
现在,就可以测试了。切换到Excel界面,单击“开发工具”选项卡,在末尾有一个“Useful Links”的菜单,试着单击其中的菜单项。

下面,再看一个示例。本示例在自定义的菜单中组合一些内置控件以方便使用,其XML代码如下:
  1. <customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>

  2.     <ribbon startFromScratch=“false“>

  3.         <tabs>

  4.             <tab id=“rxtabDemo“

  5.                  label=“Demo“

  6.                  insertBeforeMso=“TabHome“>

  7.                  <group id=“rxgrpViews“

  8.                         label=“Document Views“>

  9.                      <menu id=“rxmnuViewsMenu“

  10.                            itemSize=“normal“

  11.                            imageMso=“FilePrintPreview“

  12.                            label=“Views“

  13.                            size=“large“>

  14.                            <toggleButton idMso=“ViewPageBreakPreviewView“/>

  15.                            <toggleButton idMso=“ViewFullScreenView“/>

  16.                            <checkBox idMso=“ViewHeadings“/>

  17.                            <checkBox idMso=“ViewFormulaBar“/>

  18.                            <checkBox idMso=“GridlinesExcel“/>

  19.                     </menu>

  20.                  </group>                        

  21.             </tab>

  22.         </tabs>

  23.     </ribbon>

  24. </customUI>

复制代码

Excel中的自定义界面如下图:

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-27 18:50 | 显示全部楼层
本帖最后由 jiulongpo 于 2012-8-7 20:37 编辑

转自: http://www.excelperfect.com/index.php/2009/10/28/ribbonxstudy28/
细品RibbonX(28):splitButton控件详解


咋看起来,splitButton实质上与menu元素相同。与使用菜单一样,当用户单击拆分按钮时,将执行一项命令或者显示额外选项的层级列表。
与菜单在不同的项目之间有线条分隔不一样,splitButton没有这样的格式属性。因此,splitButton通常将相似的命令组合在一起,而将不同的命令组织到逻辑组和子组中。
splitButton胜过menu之处是能够将toggleButton控件作为界面中显示的控件的能力(“脸”控件)。当然,也可以使用按钮控件作为splitButton控件的“脸”控件。
1splitButton元素必需的属性
拆分按钮控件需要下表1所列的id属性之一。
表1:splitButton元素必需的属性
属性
何时使用
id
当创建自已的拆分按钮时
idMso
当使用现有的Microsoft拆分按钮时
idQ
当在命名空间之间创建共享的拆分按钮时
2、带有回调签名的可选的静态属性和动态属性
拆分按钮控件可以使用下表2列出的任一insert属性。
表2:splitButton元素可选的insert属性
INSERT属性
允许值
默认值
何时使用
insertAfterMso
有效的Mso组
在组末尾插入
在Microsoft控件之后插入
insertBeforeMso
有效的Mso组
在组末尾插入
在Microsoft控件之前插入
insertAfterQ
有效的组idQ
在组末尾插入
在共享的命名空间控件之后插入
insertBeforeQ
有效的组idQ
在组末尾插入
在共享的命名空间控件之前插入
也可以为菜单控件设置下表3所列的任何静态属性或等价的动态属性。
表3:splitButton元素可选的属性和回调
静态属性
动态属性
允许值
默认值
动态属性的VBA回调签名
enabled
getEnabled
true,false,1,0
true
Sub GetEnabled(control As IRibbonControl,
ByRef returnedVal)
keytip
getKeytip
1至3个字符
(none)
Sub GetKeytip(control As
IRibbonControl,
ByRef returnedVal)
showLabel
getShowLabel
true,false,1,0
true
Sub GetShowLabel(control
As IRibbonControl,
ByRef returnedVal)
tag
(none)
1至1024个字符
(none)
(none)
visible
getVisible
true,false,1,0
true
Sub GetVisible(control As
IRibbonControl,
ByRef returnedVal)
3splitButton元素允许的子对象
splitButton元素必须包含一个按钮或一个切换按钮(作为该控件的外观),也可以是一个menu元素,但必须在按钮或切换按钮之后定义。
4splitButton元素的父对象
在下列任何控件内都能放置splitButton控件:
n         box
n         buttonGroup
n         dynamicMenu
n         group
n         menu
n         officeMenu
5、使用内置的splitButton控件
(1)创建一个新的.xlsx文件,并将其保存为Excel Built In splitButton Example.xlsx。
(2)关闭该文件并在CustomUI Editor中打开。
(3)输入下列XML代码:
  1. <customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>

  2.     <ribbon

  3.        startFromScratch=“false“>

  4.        <tabs>

  5.        <tab id=“rxtabDemo“

  6.            label=“Demo“

  7.            insertBeforeMso=“TabHome“>

  8.            <group id=“rxgrpDemo“

  9.               label=“Demo“>

  10.               <splitButton idMso=“FileSaveAsMenu“

  11.                   size=“large“/>

  12.            </group>

  13.        </tab>

  14.        </tabs>

  15.     </ribbon>

  16. </customUI>
复制代码

下图为上述代码创建的组。

6、创建自定义splitButton控件
本例中,添加能够让我们在工作簿中插入新工作表的拆分按钮控件,而不是在工作表标签中右击,选择插入,然后选择工作表类型。即在插入选项卡中使用拆分按钮使用户插入一个新工作表。此外,因为插入工作表可能是一项频繁的任务,所以将新控件放置在功能区的开始。
(1)新建一个工作簿,以.xlsm为扩展名保存后关闭。
(2)在CustomUI Editor中打开该工作簿,并输入下列XML代码:
  1. <customUI

  2.     xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>

  3.     <ribbon

  4.        startFromScratch=“false“>

  5.        <tabs>

  6.        <!– Enter your first tab here –>

  7.            <tab idMso=“TabInsert“>

  8.               <group id=“rxgrpInsertSheet“

  9.                   label=“Sheets“

  10.                   insertBeforeMso=“GroupInsertTablesExcel“>

  11.                   <splitButton id=“rxsbtnInsertSheet“

  12.                          size=“large“>

  13.                      <button id=“rxbtnSplitFace“

  14.                          label=“Sheets“

  15.                          imageMso=“CreateReportFromWizard“/>

  16.                      <menu id=“mnuInsertSheet“>

  17.                      <button id=“rxbtnWorksheet“

  18.                          label=“Insert Worksheet“

  19.                          imageMso=“GetExternalDataFromText“

  20.                          onAction=“rxbtnInsertSheet_click“/>

  21.                      <button id=“rxbtnChartsheet“

  22.                          label=“Insert Chart Sheet“

  23.                          imageMso=“PivotChartType“

  24.                          onAction=“rxbtnInsertSheet_click“/>

  25.                      </menu>

  26.                   </splitButton>

  27.               </group>

  28.            </tab>

  29.        </tabs>

  30.     </ribbon>

  31. </customUI>
复制代码

注意,splitButton包含一个没有onAction回调的按钮,该按钮的唯一目的是作为拆分按钮的外观图像(“脸”)。
此外,该按钮带有一个菜单,包含两个按钮:Insert Worksheet和Insert Chart Sheet,为方便起见,共享一个回调签名。
(3)生成回调签名,并复制代码后关闭CustomUI Editor。
(4)在Excel中打开该工作簿,打开VBE并将回调签名代码粘贴到一个标准模块中。下面编辑该回调以响应希望的操作。
‘rxbtnWorkSheet onAction回调
Sub rxbtnInsertSheet_click(control As IRibbonControl)
    Select Case control.ID
        Case Is = “rxbtnWorksheet”
            ActiveWorkbook.Worksheets.Add
        Case Is = “rxbtnChartsheet”
            ActiveWorkbook.Charts.Add
    End Select
End Sub
如代码所示,设置回调来立即查询已经触发的控件的ID。如果是rxbtnWorksheet控件,那么将插入新工作表;如果是rxbtnChartsheet控件,那么将插入新图表工作表。
现在,该工作簿的“插入”选项卡如下图。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-27 18:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
接 细品RibbonX(28):splitButton控件详解

下面,我们再看一个示例。该示例沿用细品RibbonX(27)中的菜单示例,看看menu与splitButton控件有什么不同。其XML代码如下:
<customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>
    <ribbon startFromScratch=“false“>
        <tabs>
            <tab id=“rxtabDemo“
                 label=“Demo“
                 insertBeforeMso=“TabHome“>
                 <group id=“rxgrpViews“
                        label=“Document Views“>
                     <menu id=“rxmnuViewsMenu“
                           itemSize=“normal“
                           imageMso=“FilePrintPreview“
                           label=“Views Menu“
                           size=“large“>
                           <toggleButton idMso=“ViewPageBreakPreviewView“/>
                           <toggleButton idMso=“ViewFullScreenView“/>
                           <checkBox idMso=“ViewHeadings“/>
                           <checkBox idMso=“ViewFormulaBar“/>
                           <checkBox idMso=“GridlinesExcel“/>
                    </menu>
                    <splitButton id=“rxsbtnSplitVersion“
                                 size=“large“
                                 showLabel=“false“>
                           <button id=“rxbtnSplitVersionFace“
                                   imageMso=“FilePrintPreview“
                                   label=“Split Button Version“/>
                           <menu id=“rxmnuSplitVersionMenu“
                                 itemSize=“normal“>
                             <toggleButton idMso=“ViewPageBreakPreviewView“/>
                             <toggleButton idMso=“ViewFullScreenView“/>
                             <checkBox idMso=“ViewHeadings“/>
                             <checkBox idMso=“ViewFormulaBar“/>
                             <checkBox idMso=“GridlinesExcel“/>
                           </menu>
                     </splitButton>
                 </group>                        
            </tab>
        </tabs>
    </ribbon>
</customUI>
上述XML代码使用splitButton元素创建了一个基本的菜单。然而,menu元素中的一些良好特征例如menuSeparator不可用于splitButton元素。
Excel中的自定义界面如下图:
能注意到它们之间的不同吗?在splitButton控件中有一条细的水平线将图像和文本分隔开,这条线在menu控件中不明显。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-27 18:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 jiulongpo 于 2012-8-6 20:43 编辑

转自: http://www.excelperfect.com/index.php/2009/10/30/ribbonxstudy29/
细品RibbonX(29):dynamicMenu元素详解


dynamicMenu元素的主要目的是在运行时创建菜单,通过VBA回调反馈给控件XML代码。dynamicMenu通过使用getContent回调请求需要创建功能区菜单的XML代码来工作。为ID、图像、回调签名和所有其它属性的XML能够由VBA代码编译,并传递给dynamicMenu。然后执行这段代码,就好像是通常已经使用创建功能区定制编码到XML结构里的菜单一样。
dynamicMenu控件能够创建系统中打开的所有工作簿和工作表的最新列表,提供给网络驱动器里所有文件可更新的菜单层级。
在使用dynamicMenu元素时,必须编写VBA代码。即使您只是想动态创建使用内置控件的菜单,仍然需要编译XML,并通过使用VBA回调反馈到dynamicMenu控件。
1dynamicMenu元素必需的属性
dynamicMenu元素需要下表1所列的id属性之一。
表1:dynamicMenu元素必需的属性
属性

何时使用

id

当创建自已的动态菜单时

idMso

当使用现有的Microsoft动态菜单时

idQ

当在命名空间之间创建共享的动态菜单时

此外,每个dynamicMenu必须同时具有下表2所示的回调。
表2:dynamicMenu元素必需的回调
静态属性

动态属性

允许值

默认值

VBA回调签名

(none)

getContent

1至1096个字符

(none)

Sub GetContent(control As
IRibbonControl,
ByRef returnedVal)

2、带有回调签名的可选的静态属性和动态属性
dynamicMenu元素可以使用下表3列出的任一insert属性。
表3:dynamicMenu元素可选的insert属性
INSERT属性

允许值

默认值

何时使用

insertAfterMso

有效的Mso组

在组末尾插入

在Microsoft控件之后插入

insertBeforeMso

有效的Mso组

在组末尾插入

在Microsoft控件之前插入

insertAfterQ

有效的组idQ

在组末尾插入

在共享的命名空间控件之后插入

insertBeforeQ

有效的组idQ

在组末尾插入

在共享的命名空间控件之前插入

也可以为dynamicMenu元素设置下表4所列的任何静态属性或等价的动态属性。
表4:dynamicMenu元素可选的属性和回调
静态属性

动态属性

允许值

默认值

动态属性的VBA回调签名

description

getDescription

1至1024个字符

(none)

Sub GetDescription(control
As IRibbonControl,
ByRef returnedVal)

enabled

getEnabled

true,false,1,0

true

Sub GetEnabled(control
As IRibbonControl,
ByRef returnedVal)

image

getImage

1至1024个字符

(none)

Sub GetImage(control
As IRibbonControl,
ByRef returnedVal)

imageMso

getImage

1至1024个字符

(none)

同上

keytip

getKeytip

1至3个字符

(none)

Sub GetKeytip(control
As IRibbonControl,
ByRef returnedVal)

label

getLabel

1至1024个字符

(none)

Sub GetLabel(control
As IRibbonControl,
ByRef returnedVal)

screentip

getScreentip

1至1024个字符

(none)

Sub GetScreentip(control
As IRibbonControl,
ByRef returnedVal)

showImage

getShowImage

true,false,1,0

true

Sub GetShowImage(control
As IRibbonControl,
ByRef returnedVal)

showLabel

getShowLabel

true,false,1,0

true

Sub GetShowLabel(control
As IRibbonControl,
ByRef returnedVal)

size

getSize

normal,large

normal

Sub GetSize(control
As IRibbonControl,
ByRef returnedVal)

supertip

getSupertip

1至1024个字符

(none)

Sub GetSupertip(control
As IRibbonControl,
ByRef returnedVal)

tag

(none)

1至1024个字符

(none)

(none)

visible

getVisible

true,false,1,0

true

Sub GetVisible(control
As IRibbonControl,
ByRef returnedVal)

3dynamicMenu元素允许的子对象
dynamicMenu控件接受下列子对象:
n         button
n         checkbox
n         control
n         dynamicMenu
n         gallery
n         menu
n         menuSeparator
n         splitButton
n         toggleButton
4dynamicMenu元素的父对象
在下列任何控件内都能放置dymamicMenu控件:
n         box
n         buttonGroup
n         dynamicMenu
n         group
n         menu
n         officeMenu
5创建自定义控件
前文已提及,创建一个成功的动态菜单的关键是使用VBA代码来为getContent回调提供适合的XML代码。
(1)新建一个工作簿,以.xlsm为扩展名保存后关闭。
(2)在CustomUI Editor中打开该工作簿,并输入下列XML代码:
<customUI
onLoad=“rxIRibbonUI_onLoad“
xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>
   <ribbon
      startFromScratch=“false“>
      <tabs>
         <!– Enter your first tab here –>
         <tab idMso=“TabHome“>
            <group id=“rxgrpNewFile“
              label=“New File“
              insertBeforeMso=“GroupClipboard“>
              <dynamicMenu id=“rxdmnuTemplates“
                label=“Create from…“
                imageMso=“CreateReportFromWizard“
                size=“large“
                getContent=“rxdmnuTemplates_getContent“/>
            </group>
         </tab>
      </tabs>
   </ribbon>
</customUI>
如上所示,用于创建动态菜单的XML代码实际上相当简短。提供了标签和大图像作为菜单的外观,同时需要getContent回调来在运行时创建实际的菜单项。
同时,要为用户提供刷新该菜单的功能,需要使功能区无效,因此需要对customUI元素添加onLoad属性。
(3)生成回调签名,复制代码后关闭CustomUI Editor。
(4)在Excel中打开该工作簿,打开VBE并将回调签名代码粘贴到一个标准模块中。下面编辑回调代码以响应期望的操作。
onLoad回调捕获RibbonUI对象:
Dim rxIRibbonUI As IRibbonUI

Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)
    ‘Callback for onLoad to capture RibbonUI
    Set rxIRibbonUI = ribbon
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-27 18:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
接 细品RibbonX(29):dynamicMenu元素详解

下一步需要为动态菜单创建getContent回调。
Sub rxdmnuTemplates_GetContent(control As IRibbonControl, ByRef content)
‘Callback for GetContent to return XML used to create dynamicMenu
    Dim objFSO As Object
    Dim objTemplateFolder As Object
    Dim file As Object
    Dim sXML As String
    Dim lBtnCount As Long
    ‘Create FSO object
    Set objFSO = CreateObject(“Scripting.FileSystemObject”)
    ‘Set FSO object to templates folder
    Set objTemplateFolder = objFSO.getfolder(Application.TemplatesPath)
    ‘Open the XML string
    sXML = “<menu xmlns=”"http://schemas.microsoft.com/office/2006/01/customui”">”
    ‘Add template files
    If objTemplateFolder.Files.Count > 0 Then
        For Each file In objTemplateFolder.Files
            If Not Left(file.Name, 2) = “~$” Then
                Select Case LCase(Right(file.Name, 4))
                    Case “.xlt”, “xltx”, “xltm”
                        ‘Excel template.
                        sXML = sXML & _
                               “<button id=”"rxbtnDyna” & lBtnCount & “”" ” & _
                               “label=”"” & file.Name & “”" ” & _
                               “imageMso=”"FileSaveAsExcel97_2003″” ” & _
                               “tag=”"” & file.Path & “”" ” & _
                               “onAction=”"rxbtnDyna_onAction”"/>” & vbCrLf
                        lBtnCount = lBtnCount + 1
                    Case Else
                        ‘Unknown format.  Ignore.
                End Select
            End If
        Next file
    End If
    ‘Release the FSO objects
    Set file = Nothing
    Set objTemplateFolder = Nothing
    Set objFSO = Nothing
    ‘Check if any items buttons were created and create a “No Templates” button if not
    If lBtnCount = 0 Then _
       sXML = sXML & “<button id=”"rxbtnDyna0″” label=”"No Templates Found”"/>”
    ‘Add Refresh button & close the menu tags
    sXML = sXML & _
           “<button id=”"rxbtnRefresh”" ” & _
           “label=”"Refresh List”" ” & _
           “imageMso=”"RecurrenceEdit”" ” & _
           “onAction=”"rxbtnDyna_onAction”"/>” & _
           “</menu>”
    ‘Feed the XML back to the Ribbon
    content = sXML
End Sub
代码看起来很复杂!代码的开头创建FSO对象,设置文件夹对象引用模板文件夹,以便后面的代码查看文件夹中的每个文件。此外,代码中检查以“~$”开始的文件以排除临时文件,使用LCase()函数确保不会遇到区分大小写的问题。
下面主要看看传回给dynamicMenu元素的XML字符串(包含在sXML变量中)。XML字符串包含完整的菜单层次,必须以特定的XML命名空间开始。像customUI元素,每个动态菜单回调必须包括这行以便Ribbon知道如何解释代码并编译。接着是在菜单中添加按钮的XML代码,变量lBtnCount代码添加的按钮数量。
在VBA字符串里使用双引号(”)需要两个双引号。因此,第一个双引号实际上表明接下来的双引号应视为文本。例如,为了得到sXML值id=”rxbtnHello”,需要下面的VBA代码字符串:sXML=”id=””rxbtnHello”””。因此,应注意双引号的规范编写,否则在编写XML和VBA代码时会导致错误。
代码也评估添加到XML字符串中的按钮数。如果lBtnCount变量的值为0,则不需要添加任何按钮,因此创建一个按钮让用户知道没有找到模板。
您还希望用户能够刷新按钮,例如可能创建了一个新模板并想在列表中看到该模板,因此添加相应的XML代码。
从根本上说,dynamicMenu的getContent回调的真实目的是对dynamicMenu对象返回格式良好的XML代码,以便于创建菜单。
此外,还需要创建一个回调处理所创建的按钮:
Sub rxbtnDyna_onAction(control As IRibbonControl)
‘Callback for button onAction
    If control.ID = “rxbtnRefresh” Then
        rxIRibbonUI.InvalidateControl (“rxdmnuTemplates”)
    Else
        Workbooks.Add (control.Tag)
    End If
End Sub
该过程检查是否调用Refresh按钮,从而更新列表。如果不是,则基于存储在控件的tag属性中的模板创建新的工作簿。结果如下图所示。

没有模板文件!因为模板文件夹中没有模板。此时,创建一个新模板,例如testSample.xlst。然后回到自定义动态菜单的文件,单击“Refresh List”按钮,此时将看到新模板已出现在列表中,如下图所示。



TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-27 18:59 | 显示全部楼层
本帖最后由 jiulongpo 于 2012-8-7 20:44 编辑

转自: http://www.excelperfect.com/index.php/2009/11/02/ribbonxstudy30/
细品RibbonX(30):box元素详解


box元素用来在组里指定的控件周围放置一个可视的框,其主要目的是将控件作为一个单元组合在一起。
通常情况下,分配到组中的每个控件都被放置在先前的控件下面直到该列被填满,然后下一个控件被放置在其右侧列的顶行。然而,通过在框里面组合命令,可以将几个控件视作一个整体,并且一次将整个组放置在功能区。这有助于我们方便地组织显示的顺序,不会使界面混乱,或者留下一些空白。
1box元素必需的属性
box元素需要下表1所列的id属性之一。
表1:box元素必需的属性
属性
何时使用
id
当创建自已的框时
idQ
当在命名空间之间创建共享的框时
2、带有回调签名的可选的静态属性和动态属性
虽然指定位置是可选的,但是如果选择相对于另一个元素决定框的位置,那么必须使用下表2列出的任一insert属性。
表2:box元素可选的insert属性
INSERT属性
允许值
默认值
何时使用
insertAfterMso
有效的Mso组
在组末尾插入
在Microsoft控件之后插入
insertBeforeMso
有效的Mso组
在组末尾插入
在Microsoft控件之前插入
insertAfterQ
有效的组idQ
在组末尾插入
在共享的命名空间控件之后插入
insertBeforeQ
有效的组idQ
在组末尾插入
在共享的命名空间控件之前插入
也可以为box元素设置下表3所列的可选的属性和回调。
表3:box元素可选的属性和回调
静态属性
动态属性
允许值
默认值
动态属性的VBA回调签名
boxStyle
(none)
horizontal,vertical
horizontal
(none)
visible
getVisible
true,false,1,0
true
Sub GetVisible(control
As IRibbonControl,
ByRef returnedVal)
3box元素允许的子对象
box控件能够包含各种各样的RibbonX控件:
n         box
n         button
n         buttonGroup
n         checkbox
n         comboBox
n         control
n         dropDown
n         dynamicMenu
n         editBox
n         gallery
n         labelControl
n         menu
n         splitButton
n         toggleButton
注意,box控件也可以包含其它box控件,称之为嵌套。
4box元素的父对象
在下列任何控件内都能放置box控件:
n         box
n         group
5、创建自定义的box元素
示例1
本示例演示使用水平的box控件的效果。
(1)创建一个新的.xlsx文件,并将其保存为Excel box Example.xlsx。
(2)关闭该文件并在CustomUI Editor中打开。
(3)输入下列XML代码:
  1. <customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>

  2.     <ribbon>

  3.        <tabs>

  4.            <tab id = “rxtab_Demo“

  5.               label=“Demo“

  6.               insertBeforeMso=“TabHome“>

  7.               <group id=“rxgrp_Demo“

  8.                   label=“Demo Group“>

  9.                   <box id=“rxboxFormat1“

  10.                      boxStyle=“horizontal“

  11.                      visible=“true“>

  12.                      <toggleButton idMso=“Bold“/>

  13.                      <toggleButton idMso=“Italic“/>

  14.                      <toggleButton idMso=“Underline“/>

  15.                      <toggleButton idMso=“UnderlineDouble“/>

  16.                   </box>

  17.                   <button id=“rxbtnHappy1“

  18.                      imageMso=“HappyFace“

  19.                      label=“Button 1“/>

  20.                   <button id=“rxbtnHappy2“

  21.                      imageMso=“HappyFace“

  22.                      label=“Button 2“/>

  23.                   <button id=“rxbtnHappy3“

  24.                      imageMso=“HappyFace“

  25.                      label=“Button 3“/>

  26.                   <button id=“rxbtnHappy4“

  27.                      imageMso=“HappyFace“

  28.                      label=“Button 4“/>

  29.               </group>

  30.            </tab>

  31.        </tabs>

  32.     </ribbon>

  33. </customUI>

复制代码

(4)保存后关闭CustomUI Editor。
(5)在Excel中重新打开该文件,下图即为上述XML代码创建的组。

创建了一个水平框将四个格式元素组合在一起,允许其作为一个单元格移动。除了允许按钮跨越一列外,水平组也在Button1和Button2的右侧创建了“空白”,而Button3和Button4则没有。
示例2
(6)关闭Excel box Example.xlsx。
(7)重新在CustomUI Editor中打开该文件。
(8)修改XML代码如下:
    boxStyle=“horizontal“
修改为:
    boxStyle=“vertical“
(9)保存后关闭CustomUI Editor。
(10)在Excel中重新打开该文件,下图即为上述XML代码创建的组。


示例3
本示例除了演示嵌套的框控件外,还将展示使用getVisible回调控制框的可视性的效果。
示例中包含两个box控件,每一个包含两个前面示例中使用的格式控件。此外,每个框都宿于其父框里,允许用户在功能区中预留垂直空间以便没有其它按钮在这些控件下面。同时,使用三个复选框来选择哪个框可见。
(1)新建一个工作簿,以.xlsm为扩展名保存后关闭。
(2)在CustomUI Editor中打开该工作簿,并输入下列XML代码:
  1. <customUI onLoad=“rxIRibbonUI_onLoad“ xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>

  2.     <ribbon startFromScratch=“false“>

  3.         <tabs>

  4.             <tab id=“rxtabDemo“

  5.                  insertBeforeMso=“TabHome“

  6.                  label=“Demo“>

  7.                  <group id=“rxgrpDemo“

  8.                         label=“Demo Group“>

  9.                         <box id=“rxbox1“

  10.                              boxStyle=“vertical“

  11.                              getVisible=“rxboxshared_getVisible“>

  12.                              <box id=“rxbox11“

  13.                                   boxStyle=“horizontal“

  14.                                   getVisible=“rxboxshared_getVisible“>

  15.                                   <toggleButton idMso=“Bold“/>

  16.                                   <toggleButton idMso=“Italic“/>

  17.                              </box>

  18.                              <box id=“rxbox12“

  19.                                   boxStyle=“horizontal“

  20.                                   getVisible=“rxboxshared_getVisible“>

  21.                                   <toggleButton idMso=“Underline“/>

  22.                                   <toggleButton idMso=“UnderlineDouble“/>

  23.                              </box>

  24.                         </box>

  25.                              <checkBox id=“rxchkVisibleBox1“

  26.                                        label=“Box 1 Visible?“

  27.                                        getPressed=“rxchkShared_pressed“

  28.                                        onAction=“rxchkShared_click“/>

  29.                              <checkBox id=“rxchkVisibleBox11“

  30.                                        label=“Box 1-1 Visible?“

  31.                                        getPressed=“rxchkShared_pressed“

  32.                                        onAction=“rxchkShared_click“/>                                       

  33.                              <checkBox id=“rxchkVisibleBox12“

  34.                                        label=“Box 1-2 Visible?“

  35.                                        getPressed=“rxchkShared_pressed“

  36.                                        onAction=“rxchkShared_click“/>

  37.                              <button id=“rxbtnReset“

  38.                                      imageMso=“HappyFace“

  39.                                      label=“Reset All“

  40.                                      onAction=“rxbtnReset_click“/>

  41.                 </group>

  42.             </tab>

  43.         </tabs>

  44.     </ribbon>

  45. </customUI>
复制代码

注意,本示例实际上共有三个box控件,其它两个嵌套在第一个中。三个控件共享回调。当然,需要能够使功能区无效以迫使box控件隐藏或显示,因此需要捕获RibbonUI对象。
(3)生成回调签名并复制后,关闭CustomUI Editor。
(4)重新打开该工作簿,打开VBE,将回调签名代码粘贴到标准模块,然后开始完善代码。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-27 19:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
接 细品RibbonX(30):box元素详解

首先,在模块顶部声明公共变量:
Dim rxIRibbonUI As IRibbonUI
Dim bBox1_Visible As Boolean
Dim bBox11_Visible As Boolean
Dim bBox12_Visible As Boolean
第1行代码中的变量用于存储RibbonUI对象,能够在后面使功能区无效。其它三个变量包含不同组的可视状态。由于通过复选框控件控制,因此使用这些变量存储与每个框相关的复选框的状态。
除了在装载时捕获RibbonUI外,需要确保每个框控件是可见的。因此,onLoad回调代码如下:
‘customUI.onLoad回调
Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)
    Set rxIRibbonUI = ribbon
    bBox1_Visible = True
    bBox11_Visible = True
    bBox12_Visible = True
End Sub
接下来,设置box控件的共享的getVisible回调:
‘rxbox1,rxbox11,rxbox12 getVisible共享回调
Sub rxboxshared_getVisible(control As IRibbonControl, ByRef returnedVal)
    Select Case control.ID
        Case “rxbox1″
            returnedVal = bBox1_Visible
        Case “rxbox11″
            returnedVal = bBox11_Visible
        Case “rxbox12″
            returnedVal = bBox12_Visible
    End Select
End Sub
case语句评估触发回调的控件,从变量中获取合适的值并返回给RibbonUI。getPressed回调基于该变量处理复选框控件。
‘rxchkVisibleBox1,-Box11,-Box12 getPressed共享的回调
Sub rxchkShared_pressed(control As IRibbonControl, ByRef returnedVal)
    Select Case control.ID
        Case “rxchkVisibleBox1″
            returnedVal = bBox1_Visible
        Case “rxchkVisibleBox11″
            returnedVal = bBox11_Visible
        Case “rxchkVisibleBox12″
            returnedVal = bBox12_Visible
    End Select
End Sub
接下来,创建当单击复选框时触发的程序。修改可见的变量的值为当前“按下”状态(true或false),然后触发功能区的无效。这种无效不仅仅触发每一个box控件的getVisible回调,也确保所有的复选框控件更新:
‘rxchkVisibleBox1,-Box11,-Box12 onAction共享的回调
Sub rxchkShared_click(control As IRibbonControl, pressed As Boolean)
    Select Case control.ID
        Case “rxchkVisibleBox1″
            bBox1_Visible = pressed
        Case “rxchkVisibleBox11″
            bBox11_Visible = pressed
        Case “rxchkVisibleBox12″
            bBox12_Visible = pressed
    End Select
    rxIRibbonUI.Invalidate
End Sub
最后是添加的按钮的onAction回调,便于设置每个控件为默认的可见状态:
‘rxbtnReset onAction共享回调使按钮可见
Sub rxbtnReset_click(control As IRibbonControl)
    bBox1_Visible = True
    bBox11_Visible = True
    bBox12_Visible = True
    rxIRibbonUI.Invalidate
End Sub
好了!该测试用户界面效果了。保存代码并关闭工作簿,再重新打开该工作簿,如下图所示。
  
试着清除复选框,相应的控件将消失。单击“Reset All”将使所有控件恢复可见。
注意,试图使用getVisible回调设置父框为visible=”false”,将不会像您想像的那样隐藏父框和所有的子控件。相反,父和子box控件将保持当前状态,控件本身是可见的并且工作,而任何试图通过回调对嵌套控件状态的修改都将忽略。这种影响将保留到父框控件的getVisible回调重新被设置为True。
隐藏父box控件的唯一办法是隐藏所有的子项。此时,父框控件将折叠并且不可见,即使其visible属性被设置为True。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-27 19:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 jiulongpo 于 2012-8-6 20:53 编辑

转自: http://www.excelperfect.com/index.php/2009/11/06/ribbonxstudy32/
细品RibbonX(32):labelControl元素详解


labelControl为开发者提供了一种在功能区中显示文本标签的方式。这类控件没有行为,通常用作其它控件的标题或描述。常常用来为在一列中排列的按钮提供上下文。
1labelControl元素必需的属性
labelControl元素需要下表1所列的id属性之一。
表1:labelControl元素必需的属性
属性

何时使用

id

当创建自已的labelControl时

idMso

当使用已有的Microsoft labelControl时

idQ

当在命名空间之间创建共享的labelControl时

2、带有回调签名的可选的静态属性和动态属性
为了相对于另一个控件决定labelControl的位置,使用下表2列出的任一insert属性。
表2:labelControl元素可选的insert属性
INSERT属性

允许值

默认值

何时使用

insertAfterMso

有效的Mso组

在组末尾插入

在Microsoft控件之后插入

insertBeforeMso

有效的Mso组

在组末尾插入

在Microsoft控件之前插入

insertAfterQ

有效的组idQ

在组末尾插入

在共享的命名空间控件之后插入

insertBeforeQ

有效的组idQ

在组末尾插入

在共享的命名空间控件之前插入

也可以为labelControl元素设置下表3所列任意属性或等价的回调的组合。
表3:labelControl元素可选的属性和回调
静态属性

动态属性

允许值

默认值

动态属性的VBA回调签名

enabled

getEnabled

true,false,1,0

true

Sub GetEnabled(control
As IRibbonControl,
ByRef returnedVal)

label

getLabel

1至1024个字符

(none)

Sub GetLabel(control As
IRibbonControl,
ByRef returnedVal)

screentip

getScreentip

1至1024个字符

(none)

Sub GetScreentip(control
As IRibbonControl,
ByRef returnedVal)

showLabel

getShowLabel

true,false,1,0

true

Sub GetShowLabel(control
As IRibbonControl,
ByRef returnedVal)

supertip

getSupertip

1至1024个字符

(none)

Sub GetSupertip(control
As IRibbonControl,
ByRef returnedVal)

tag

(none)

1至1024个字符

(none)

(none)

visible

getVisible

true,false

true

Sub GetVisible(control
As IRibbonControl,
ByRef returnedVal)

3labelControl元素允许的子对象
labelControl元素不支持任何类型的子控件。
4labelControl元素的父对象
在下列任何控件内都能放置labelControl元素:
n         box
n         group
5、使用内置的labelControl元素
Microsoft实际上在Excel中公开了6个labelControl元素。然而,创建自定义labelControl更快且更直接。
6、创建自定义的labelControl元素
labelControl的一个相当酷的使用是将其作为标记。
(1)创建一个新的.xlsm文件,并将其保存为Excel labelControl Example.xlsm。
(2)关闭该文件并在CustomUI Editor中打开。
(3)输入下列XML代码:
<customUI onLoad=“rxIRibbonUI_onLoad“ xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>
    <ribbon startFromScratch=“false“>
        <tabs>
            <tab id=“rxtabDemo“
                 insertBeforeMso=“TabHome“
                 label=“Demo“>
                <group id=“rxgrpDemo“
                       label=“Demo Group“>
                      <labelControl id=“rxlblFeedback“
                                    getLabel=“rxlblFeedback_getLabel“/>
                      <button id=“rxbtnProcess“
                              getImage=“rxbtnProcess_getImage“
                              onAction=“rxbtnProcess_click“/>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>
(4)生成回调签名,保存后关闭CustomUI Editor。
(5)在Excel中重新打开该文件,在VBE的标准模块中粘贴回调签名。
在编辑回调代码之前,让我们先考虑一个完整的操作过程。我们希望在单击按钮之前标签去读取Process Accounts,随后是Accounts Complete。我们需要一个变量,存储表明按钮是否被单击,因此在模块的开始声明该变量:
Dim bButtonClicked As Boolean
当然,还需要包括一个存储RibbonUI的全局变量。现在,创建onLoad回调代码:
Dim rxIRibbonUI As IRibbonUI

‘customUI.onLoad回调
Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)
    Set rxIRibbonUI = ribbon
End Sub
接下来,为labelControl创建getLabel回调。评估是否单击按钮的最容易的方法是检查bButtonClicked变量。使用Select Case语句,如下所示:
‘rxlblFeedback getLabel回调
Sub rxlblFeedback_getLabel(control As IRibbonControl, ByRef returnedVal)
    Select Case bButtonClicked
        Case False
            returnedVal = “Process Accounts”
        Case True
            returnedVal = “Accounts Complete”
    End Select
End Sub
同样,通过Select语句的评估决定显示图像或标签:
‘rxbtnProcess getImage回调
Sub rxbtnProcess_getImage(control As IRibbonControl, ByRef returnedVal)
    Select Case bButtonClicked
        Case False
            returnedVal = “CreateReportFromWizard”
        Case True
            returnedVal = “DeclineInvitation”
    End Select
End Sub
最后,来处理按钮。同样,检查bButtonClicked的值,如果为False,那么修改bButtonClicked的值为true,运行程序,然后使功能区无效。当然,无效将触发重建,控件将会更新以显示用户已经实施的操作。如果bButtonClicked的值已经是true,那么告诉用户他们已经完成了程序。代码如下:
‘rxbtnProcess onAction回调
Sub rxbtnProcess_click(control As IRibbonControl)
    Select Case bButtonClicked
        Case False
            bButtonClicked = True

            ‘Code to process accounts goes here

            rxIRibbonUI.Invalidate
        Case True
            MsgBox “已经运行了这个程序!”
    End Select
End Sub
(6)保存并关闭该工作簿,然后重新打开该工作簿,结果如下图所示。

单击该按钮,该组将更新为下图所示的结果。

再次单击该按钮,将会弹出一条消息框。
正如上述代码所示,我们使用了标签和图形来唤起用户对状态的注意,或者状态的改变。这是一种技巧,即使用labelControl来警告用户对象或事件的状态。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-27 19:07 | 显示全部楼层
本帖最后由 jiulongpo 于 2012-8-6 20:53 编辑

转自: http://www.excelperfect.com/index.php/2009/11/10/ribbonxstudy33/
细品RibbonX(33):separator元素详解


separator控件作为一条垂直线出现,分开组中的项目,从组的顶部跨越到组的底部,并且不能够设置任何其它的方向或尺寸。然而,它能够在功能区中提供空白,与使用垂直的box控件创建的空白相似。
1separator元素必需的属性
separator元素需要下表1所列的id属性之一。
表1:separator元素必需的属性
属性

何时使用

id

当创建自已的分隔条时

idQ

当在命名空间之间创建共享的分隔条时

2、带有回调签名的可选的静态属性和动态属性
separator控件相对于已存在的控件的放置需要使用下表2列出的insert属性之一。
表2:separator元素可选的insert属性
INSERT属性

允许值

默认值

何时使用

insertAfterMso

有效的Mso组

在组末尾插入

在Microsoft控件之后插入

insertBeforeMso

有效的Mso组

在组末尾插入

在Microsoft控件之前插入

insertAfterQ

有效的组idQ

在组末尾插入

在共享的命名空间控件之后插入

insertBeforeQ

有效的组idQ

在组末尾插入

在共享的命名空间控件之前插入

separator元素接受下表3所列的静态可见的属性或等价的回调。
表3:separator元素可选的属性和回调
静态属性

动态属性

允许值

默认值

动态属性的VBA回调签名

visible

getVisible

true,false,1,0

true

Sub GetVisible(control
As IRibbonControl,
ByRef returnedVal)

3separator元素允许的子对象
separator元素不支持任何类型的子控件。
4separator元素的父对象
在下列任何控件内都能放置separator控件:
n         documentControl
n         group
n         sharedControl
5、创建自定义的separator元素
下面的示例演示如何使用分隔条来在功能区中创建空白。
(1)创建一个新的.xlsx文件,并将其保存为Excel separator Example.xlsx。
(2)关闭该文件并在CustomUI Editor中打开。
(3)输入下列XML代码:
<customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>
    <ribbon>
       <tabs>
           <tab id = “rxtab_Demo“
              label=“Demo“
              insertBeforeMso=“TabHome“>
              <group id=“rxgrp_Demo“
                  label=“Demo Group“>
                  <box id=“rxboxFormat1“
                     boxStyle=“horizontal“
                     visible=“true“>
                     <toggleButton idMso=“Bold“/>
                     <toggleButton idMso=“Italic“/>
                     <toggleButton idMso=“Underline“/>
                     <toggleButton idMso=“UnderlineDouble“/>
                  </box>
                  <separator id=“rxsep1“/>
                  <button id=“rxbtnHappy1“
                     imageMso=“HappyFace“
                     label=“Button 1“/>
                  <button id=“rxbtnHappy2“
                     imageMso=“HappyFace“
                     label=“Button 2“/>
                  <button id=“rxbtnHappy3“
                     imageMso=“HappyFace“
                     label=“Button 3“/>
                  <button id=“rxbtnHappy4“
                     imageMso=“HappyFace“
                     label=“Button 4“/>
              </group>
           </tab>
       </tabs>
    </ribbon>
</customUI>
(4)保存后关闭CustomUI Editor。
(5)在Excel中重新打开该文件,结果如下图所示。


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-22 17:32 , Processed in 0.070287 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表