editBox控件允许用户输入文本,这为我们提供了一种允许用户输入的方便的方法。例如,可以使用editBox重命名Excel工作表。基本的概念是要求用户在editBox中输入,然后当其失去焦点且下一个控件激活之前发生事件。当然,也可以提供一个按钮,当单击该按钮后处理eidtBox控件中的内容。
1、editBox元素必需的属性
编辑框控件需要下表1所列的id属性之一。
表1:editBox元素必需的属性
属性 |
何时使用 |
id |
当创建自已的编辑框时 |
idMso |
当使用现有的Microsoft编辑框时 |
idQ |
当在命名空间之间创建共享的编辑框时 |
编辑框控件也需要表2所列出的onAction回调。
表2:editBox元素必需的回调
动态属性 |
允许值 |
VBA回调签名 |
onChange |
1至4096个字符 |
Sub OnChange(control As IRibbonControl, text as String) |
2、带有回调签名的可选的静态属性和动态属性
编辑框控件可以使用下表3列出的任一insert属性。
表3:editBox元素可选的insert属性
INSERT属性 |
允许值 |
默认值 |
何时使用 |
insertAfterMso |
有效的Mso组 |
在组末尾插入 |
在Microsoft控件之后插入 |
insertBeforeMso |
有效的Mso组 |
在组末尾插入 |
在Microsoft控件之前插入 |
insertAfterQ |
有效的组idQ |
在组末尾插入 |
在共享的命名空间控件之后插入 |
insertBeforeQ |
有效的组idQ |
在组末尾插入 |
在共享的命名空间控件之前插入 |
也可以提供下表4所列的任何或所有的属性。
表4:editBox元素可选的属性和回调
静态属性 |
动态属性 |
允许值 |
默认值 |
动态属性的VBA回调签名 |
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) |
maxLength |
(none) |
1至1024个字符 |
1024 |
(none) |
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 returenedVal) |
sizeString |
(none) |
1至1024个字符 |
默认值为12 |
(none) |
supertip |
getSupertip |
1至1024个字符 |
(none) |
Sub GetSupertip(control As IRibbonControl, ByRef returnedVal) |
tag |
(none) |
1至1024个字符 |
(none) |
(none) |
(none) |
getText |
1至4096个字符 |
(none) |
Sub GetText(control As IRibbonControl, ByRef returnedVal) |
visible |
getVisible |
true,false,1,0 |
true |
Sub GetVisible(control As IRibbonControl, ByRef returnedVal) |
3、editBox元素允许的子对象
editBox控件不支持任何子对象。
4、editBox元素的父对象
仅能够在下列两个控件内放置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中重新打开工作簿,在界面中应该看到一个带有编辑框的自定义选项卡,如下图所示。
由于没有实现操作的回调代码,因此该编辑框不做任何操作。打开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
如下图所示,在编辑框中输入数值并回车后,当前单元格所在的列宽将根据数值进行调整。