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

checkBox控件能够使用户在两种状态之间切换。虽然默认情况下状态是真和假,但是该元素能够指明开/关、上/下、左/右、1/0、或者任何可以想象到的相对状态组合。

您可能想使用checkBox来做下列操作:

²        表明数据库中的某字段是否满足特定的条件。在这种情况下,当满足条件时,将自动选中复选框。

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

1checkBox元素必需的属性

复选框控件需要下表1所列的id属性之一。

1checkBox元素必需的属性

属性

何时使用

id

当创建自已的复选框时

idMso

当使用现有的Microsoft复选框时

idQ

当在命名空间之间创建共享的复选框时

每个复选框控件也需要表2所列出的onAction回调。

2checkBox元素必需的回调

动态属性

允许值

VBA回调签名

onAction

14096个字符

Sub OnAction(control As IRibbonControl,

pressed as Boolean)

2、带有回调签名的可选的静态属性和动态属性

复选框控件可以使用下表3列出的任一insert属性。

3checkBox元素可选的insert属性

INSERT属性

允许值

默认值

何时使用

insertAfterMso

有效的Mso

在组末尾插入

Microsoft控件之后插入

insertBeforeMso

有效的Mso

在组末尾插入

Microsoft控件之前插入

insertAfterQ

有效的组idQ

在组末尾插入

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

insertBeforeQ

有效的组idQ

在组末尾插入

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

也可以提供下表4所列的任何或所有的属性。

4checkBox元素可选的属性和回调

静态属性

动态属性

允许值

默认值

动态属性的VBA回调签名

description

getDescription

14096个字符

none

Sub GetDescription(control  As IRibbonControl,ByRef returnedVal)

enabled

getEnabled

true,false,1,0

true

Sub GetEnabled(control As 

IRibbonControl,

ByRef returnedVal)

keytip

getKeytip

13个字符

none

Sub GetKeytip(control As                                             IRibbonControl,

ByRef returnedVal)

label

getLabel

11024个字符

none

Sub GetLabel(control As                                              

IRibbonControl,

ByRef returnedVal)

none

getPressed

true,false,1,0

false

Sub GetPressed(control As IRibbonControl,

ByRef returnedVal)

screentip

getScreentip

11024个字符

none

Sub GetScreentip(control As IRibbonControl,

ByRef returnedVal)

supertip

getSupertip

11024个字符

(none)

Sub GetSupertip(control As IRibbonControl,

ByRef returnedVal)

tag

(none)

11024个字符

(none)

(none)

visible

getVisible

true,false,1,0

true

Sub GetVisible(control As IRibbonControl,

ByRef returnedVal)

3checkBox元素允许的子对象

checkBox控件不支持任何子对象。

4checkBox元素的父对象

在下列任何控件内都能放置checkBox控件:

Ø         box

Ø         dynamicMenu

Ø         group

Ø         menu

Ø         officeMenu

5、使用内置的复选框控件

1)创建一个新的.xlsx文件,并将其保存为Excel Built In CheckBox Example.xlsx

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

3)输入下列XML

<customUI xmlns=http://schemas.microsoft.com/office/2006/01/customui>

    <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=Toggle Gridlines/>

此时,显示的界面如下图所示:

 

6、创建自定义复选框控件

使用Excel时,便利的事情之一是迅速在工作簿中切换A1R1C1样式公式的能力。在一些情形下,使用R1C1引用的公式将更好。下面的示例演示如何容易地快速切换两种引用形式的公式。

本示例在“公式”选项卡中添加一个控件,省去了必须通过Office菜单来找到该设置的复选框的麻烦。如下图所示,添加的新复选框控件在最右侧的“Other Settings”组中。

 

首先,新建一个工作簿,保存后关闭。然后使用CustomUI Editor输入下列XML代码:

<customUI xmlns=http://schemas.microsoft.com/office/2006/01/customui 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_onLoadrxchkR1C1_getPressedrxchkR1C1_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引用样式后不会立即更新,您需要激活另一工作表后再返回该工作表,即可更新了。

相关文章

  • 细品RibbonX(18):button控件详解
  • 细品RibbonX(16):RibbonX开发基础问答
  • 细品RibbonX(15):回调(CallBacks)
  • 细品RibbonX(14):核心的OpenXML架构元素
  • 细品RibbonX(13):初识XML
  • 细品RibbonX(9):层次分明的RibbonX代码结构
  • 细品RibbonX(8):自定义Ribbon的“武器库”
  • 细品RibbonX(7):有效的RibbonX设计
  • 细品RibbonX(6):初识RibbonX
  • 细品RibbonX(5):开放的XML文件格式

你可能感兴趣的:(Excel开发应用)