分享

细品RibbonX(20):editBox控件详解

 yuxinrong 2009-10-29

editBox控件允许用户输入文本,这为我们提供了一种允许用户输入的方便的方法。例如,可以使用editBox重命名Excel工作表。基本的概念是要求用户在editBox中输入,然后当其失去焦点且下一个控件激活之前发生事件。当然,也可以提供一个按钮,当单击该按钮后处理eidtBox控件中的内容。

1editBox元素必需的属性

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

1editBox元素必需的属性

属性

何时使用

id

当创建自已的编辑框时

idMso

当使用现有的Microsoft编辑框时

idQ

当在命名空间之间创建共享的编辑框时

编辑框控件也需要表2所列出的onAction回调。

2editBox元素必需的回调

动态属性

允许值

VBA回调签名

onChange

14096个字符

Sub OnChange(control As IRibbonControl,

text as String)

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

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

3editBox元素可选的insert属性

INSERT属性

允许值

默认值

何时使用

insertAfterMso

有效的Mso

在组末尾插入

Microsoft控件之后插入

insertBeforeMso

有效的Mso

在组末尾插入

Microsoft控件之前插入

insertAfterQ

有效的组idQ

在组末尾插入

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

insertBeforeQ

有效的组idQ

在组末尾插入

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

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

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

静态属性

动态属性

允许值

默认值

动态属性的VBA回调签名

enabled

getEnabled

true,false,1,0

true

Sub GetEnabled(control As                                              IRibbonControl,

ByRef returnedVal)

image

getImage

11024个字符

none

Sub GetImage(control As IRibbonControl,

ByRef returnedVal)

imageMso

getImage

11024个字符

none

同上

keytip

getKeytip

13个字符

none

Sub GetKeytip(control As                                             IRibbonControl,

ByRef returnedVal)

label

getLabel

11024个字符

none

Sub GetLabel(control As 

IRibbonControl,

ByRef returnedVal)

maxLength

none

11024个字符

1024

none

screentip

getScreentip

11024个字符

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 returenedVal)

sizeString

none

11024个字符

默认值为12

none

supertip

getSupertip

11024个字符

(none)

Sub GetSupertip(control As IRibbonControl,

ByRef returnedVal)

tag

(none)

11024个字符

(none)

(none)

none

getText

14096个字符

none

Sub GetText(control As IRibbonControl,

ByRef returnedVal)

visible

getVisible

true,false,1,0

true

Sub GetVisible(control As IRibbonControl,

ByRef returnedVal)

3editBox元素允许的子对象

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

4editBox元素的父对象

仅能够在下列两个控件内放置editBox控件:

Ø         box

Ø         group

5、使用内置的编辑框控件

很有趣,没有方法自定义任何内置的editBox控件。

6、创建自定义编辑框控件

如前所述,编辑框为获取用户输入提供了一种有效的方式。下面的示例介绍一些常见的使用,例如修改文件或工作表的名字。

创建一个新的Excel工作簿并以.xlsm格式保存。打开VBE,插入一个标准模块,在其中创建到将来要对编辑框进行操作的宏代码。代码如下:

Private Function shtRename(sCallSheet As String) As Boolean

    On Error Resume Next

    ActiveSheet.Name = sCallSheet

    If Err.Number = 0 Then shtRename = True

End Function

 

Public Sub RenameSheet()

    Dim sNewSheetName As String

    sNewSheetName = InputBox(”请为工作表输入一个新名字.”)

    If shtRename(sNewSheetName) = False Then

        MsgBox “发生问题了,不能够” & vbCrLf & _

            重命名工作表.请再试.”, _

            vbOKOnly + vbCritical, “错误!”

    End If

End Sub

下面简要解释上述两个过程。shtRename是一个用于重命名工作表的自定义函数。On Error语句在遇到错误时允许程序继续执行。该函数通过测试是否遇到错误,并返回真/假值表明是否重命名成功。

RenameSheet调用shtRename函数并测试是否成功,如果没有成功则通知用户。

要测试代码,运行RenameSheet过程,出现提示时输入名字,此时工作表将被重命名。如果提供了一个无效的参数,例如已存在的工作表字,那么将会返回错误消息。

现在,关闭Excel工作簿,再CustomUI Editor中打开该工作簿,输入下列XML代码:

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

    <ribbon startFromScratch=false>

        <tabs>

            <tab id=rxtabCustom

                 label=My Tools

                 insertBeforeMso=TabHome>

                 <group id=rxgrpCustom

                        label=Worksheet>

                        <editBox id=rxtxtRename

                                 label=Rename Sheet to:

                                 imageMso=SignatureLineInsert

                                 keytip=R

                                 sizeString=123456789012345

                                 onChange=rxtxtRename_Click/>

                </group>

            </tab>

        </tabs>

    </ribbon>

</customUI>

技巧:在使用sizeString属性时,使用增加的数字输入字符数便于迅速判断允许的字符数。本例中,“123456789012345”是15个字符。

接下来,生成回调签名并复制代码,保存后关闭CustomUI Editor

Excel中重新打开工作簿,在界面中应该看到一个带有编辑框的自定义选项卡,如下图所示。

 

editboxsample1

由于没有实现操作的回调代码,因此该编辑框不做任何操作。打开VBE,在标准模块中粘贴回调签名,并输入下列代码:

‘rxtxtRename onChange回调

Sub rxtxtRename_Click(control As IRibbonControl, text As String)

    If shtRename(text) = False Then

        MsgBox “发生问题了,不能够” & vbCrLf & _

            重命名工作表.请再试.”, _

            vbOKOnly + vbCritical, “错误!”

    End If

End Sub

好了!现在可以测试编辑框了。回到Excel界面,在自定义的编辑框中输入新的名字,查看工作表标签是否已被更新。

下面,再演示一个例子:在编辑框中输入数字后,当前单元格所在的列宽将作相应的调整。在CustomUI Editor中打开上例所示的工作簿,在其中添加下面的XML代码:

                <group id=rxgrpCustom1

                       label=Change Column Width>

                       <editBox id=rxtxtWidth

                                label=Width:

                                sizeString=1234567890

                                onChange=rxtxtWidth_Change/>

                </group>

生成回调签名并复制后,关闭CustomUI Editor。在Excel中打开该工作簿,在VBE中粘贴回调签名,并输入代码:

Dim dblWidth As Double

‘rxtxtWidth onChange回调

Sub rxtxtWidth_Change(control As IRibbonControl, text As String)

    On Error Resume Next

    dblWidth = CDbl(text)

    If Err.Number <> 0 Then

        MsgBox “对不起,必须输入数字值!”

        text = “”

    Else

        ActiveCell.ColumnWidth = dblWidth

    End If

End Sub

如下图所示,在编辑框中输入数值并回车后,当前单元格所在的列宽将根据数值进行调整。

editboxsample2

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多