细品RibbonX(19):checkBox控件详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

细品RibbonX(19):checkBox控件详解
checkBox控件能够使用户在两种状态之间切换。

虽然默认情况下状态是真和假,但是该元素能够指明开/关、上/下、左/右、1/0、或者任何可以想象到的相对状态组合。

您可能想使用checkBox来做下列操作:
²表明数据库中的某字段是否满足特定的条件。

在这种情况下,当满足条件时,将自动选中复选框。

²允许用户确定是否显示某对象,例如显示或隐藏网格线,或者子窗体。

1、checkBox元素必需的属性
复选框控件需要下表1所列的id属性之一。

表1:checkBox元素必需的属性
每个复选框控件也需要表2所列出的onAction回调。

表2:checkBox元素必需的回调
2、带有回调签名的可选的静态属性和动态属性
复选框控件可以使用下表3列出的任一insert属性。

表3:checkBox元素可选的insert属性
也可以提供下表4所列的任何或所有的属性。

表4:checkBox元素可选的属性和回调
3、checkBox元素允许的子对象
checkBox控件不支持任何子对象。

4、checkBox元素的父对象
在下列任何控件内都能放置checkBox控件:
Ø box
Ø dynamicMenu
Ø group
Ø menu
Ø officeMenu
5、使用内置的复选框控件
(1)创建一个新的.xlsx文件,并将其保存为Excel Built In CheckBox Example.xlsx。

(2)关闭该文件并在CustomUI Editor中打开该文件。

(3)输入下列XML:
<customUI
xmlns=“/office/2006/01/custom ui“>
<ribbon startFromScratch=“false“>
<tabs>
<tab id=“rxtabDemo“
label=“Demo“
insertBeforeMso=“TabHome“>
<group id=“rxgrpDemo“
label=“Demo Group“>
<checkBox idMso=“GridlinesExcel“/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
下图为上述代码创建的组:
您也可以修改该控件的名字,使用下面的XML代替相应的语句:<checkBox idMso=“GridlinesExcel“
label=“T oggle Gridlines“/>
此时,显示的界面如下图所示:
6、创建自定义复选框控件
使用Excel时,便利的事情之一是迅速在工作簿中切换A1和R1C1样式公式的能力。

在一些情形下,使用R1C1引用的公式将更好。

下面的示例演示如何容易地快速切换两种引用形式的公式。

本示例在“公式”选项卡中添加一个控件,省去了必须通过Office菜单来找到该设置的复选框的麻烦。

如下图所示,添加的新复选框控件在最右侧的“Other Settings”组中。

首先,新建一个工作簿,保存后关闭。

然后使用CustomUI Editor输入下列XML代码:
<customUI
xmlns=“/office/2006/01/custom
ui“onLoad=“rxIRibbonUI_onLoad“>
<ribbon startFromScratch=“false“>
<tabs>
<tab idMso=“TabFormulas“>
<group id=“rxgrpOtherSettings“
label=“Other Setting“
insertBeforeMso=“GroupNamedCells“>
<checkBox id=“rxchkR1C1“
label=“R1C1 Formulas“
getPressed=“rxchkR1C1_getPressed“
onAction=“rxchkR1C1_click“/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
注意,在XML代码的第一行,添加了onLoad属性,以便后面使用时捕获Ribbon对象。

单击“Generate Callbacks”按钮,复制生成的代码。

关闭CustomUI Editor。

重新打开Excel文件,并打开VBE,将复制的代码粘贴到标准模块中。

现在,该文件中有三个回调签名:rxIRibbonUI_onLoad,rxchkR1C1_getPressed,rxchkR1C1_click,其目的是:ØrxIRibbonUI_onLoad存储RibbonUI对象,能够使控件无效以便随后强制更新控件。

Ø当第一次激活“公式”选项卡(或使无效)并适当地设置复选框时触发rxchkR1C1_getPressed。

Ø无论何时选中或取消选中复选框都将触发rxchkR1C1_click,其目的实际上是切换开关设置。

此外,rxIRibbonUI_onLoad需要自定义工作簿属性来操作,因此应该首先对其设置。

在该工程的ThisWorkbook模块中,输入下列代码:
‘保存功能区和功能区控件状态的私有变量
Private pRibbonUI As IRibbonUI
Public Property Let RibbonUI(iRib As IRibbonUI)
‘设置RibbonUI属性以便后面使用
Set pRibbonUI = iRib
End Property
Public Property Get RibbonUI() As IRibbonUI
‘获取RibbonUI属性以供使用
Set RibbonUI = pRibbonUI
End Property
转到标准模块中,添加下列代码:
‘customUI.onLoad回调
Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)
‘设置RibbonUI为工作簿属性以供后面使用
ThisWorkbook.RibbonUI = ribbon
End Sub
此时,当装载该工作簿时,将捕获RibbonUI对象,并将可用于使之无效。

接下来,生成切换设置的宏。

最容易的方法是先录制实现该功能的宏:打开宏录制器,选择“Office菜单—Excel选项—公式”,选中“R1C1引用样式”前的复选框。

停止录制,转到VBE中查看录制的代码:
Application.ReferenceStyle = xlR1C1
这就是宏录制器能够帮助编写代码的一种情形,告诉确切地告诉你需要引用的对象。

虽然仍需要对代码作一些修改,但至少知道从哪里开始以及正确的语法。

再在处理getPressed回调。

主要是确定应用程序是否是R1C1模式,如果是则返回true。

代码如下:
‘rxchkR1C1 getPressed回调
Sub rxchkR1C1_getPressed(control As IRibbonControl, ByRef returnedVal)
If Application.ReferenceStyle = xlR1C1 Then returnedVal = True
End Sub
下一步,处理单击复选框的回调。

pressed参数告诉是否复选框被选中(pressed=true)或没有选中(pressed=false)。

代码如下:‘rxchkR1C1 onAction回调
Sub rxchkR1C1_click(control As IRibbonControl, pressed As Boolean)
Select Case pressed
Case True
Application.ReferenceStyle = xlR1C1
Case False
Application.ReferenceStyle = xlA1
End Select
End Sub
如果单击“公式”选项卡,将触发getPressed程序,设置复选框来表明当前所处的显示模式。

否则,选择复选框来设置其为相反的状态。

但仍存在问题。

假设有人通过“Excel选项”修改了复选框的值,此时选项卡中的复选框将不会被更新。

为解决这个问题,可以在无论何时激活新工作表时,强制更新该复选框。

此时,使用使特定的控件(即rxchkR1C1 checkBox)无效的能力。

再转到ThisWorkbook代码模块,从代码窗口左侧下拉列表中选择Workbook,然后从右侧下拉列表中选择Sheet_Activate,添加代码如下:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
‘每次激活一个工作表时使该选项卡无效
ThisWorkbook.RibbonUI.InvalidateControl (”rxchkR1C1″)
End Sub
好了!保存并关闭后重新打开工作簿,然后输入公式来测试。

当然,在通过“Excel选项”设置R1C1引用样式后不会立即更新,您需要激活另一工作表后再返回该工作表,即可更新了。

相关文档
最新文档