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