用户在使用文本框输入数据时,往往希望能限制输入数据的类型,比如只能输入数字。但是没有内置的属性能限制在文本框中只能输入数字,只能在文本框的事件过程中使用代码来测试输入的是哪类字符,然后只允许输入数字字符和一个“-”号、一个“.”号,如下面的代码所示。
#001 Private Sub TextBox1_KeyPress(ByVal KeyANSI As MSForms.ReturnInteger)
#002 Select Case KeyANSI
#003 Case Asc("0") To Asc("9")
#004 Case Asc("-")
#005 If InStr(1, Me.TextBox1.Text, "-") > 0 Or _
#006 Me.TextBox1.SelStart > 0 Then
#007 KeyANSI = 0
#008 End If
#009 Case Asc(".")
#010 If InStr(1, Me.TextBox1.Text, ".") > 0 Then
#011 KeyANSI = 0
#012 End If
#013 Case Else
#014 KeyANSI = 0
#015 End Select
#016 End Sub
代码解析:
文本框的KeyPress事件过程,测试键盘输入的是哪类字符,只允许输入数字字符和一个“-”号、一个“.”号。
KeyPress事件的语法如下:
Private Sub object_KeyPress( ByVal KeyANSI As MSForms.ReturnInteger)
参数Object是必需的,一个有效的对象。
参数KeyANSI是可选的,整数值,代表标准的数字ANSI 键代码。
第2行代码使用Case Else语句测试文本框KeyPress事件的KeyANSI参数值。
第3行代码,如果键盘输入的是0到9之间的数字字符,则允许输入。如果想在文本框中允许其它类型的字符输入,在此句代码中列出允许输入的字符即可。
第4行到第8行代码,如果键盘输入的是“-”号,先使用InStr函数测试文本框中是否已有“-”号,如果InStr函数返回值大于0,说明文本框中已有“-”号。接下来使用文本框的SelStart 属性来测试插入点,如果文本框的SelStart 属性值大于0,说明“-”号的插入点不是第一个。如果以上两个条件中有任何一个成立,将KeyAscii参数值设置为0,使文本框只能在第一位输入一个“-”号。
第9行到第12行代码,如果键盘输入的是“.”号的话,使用InStr函数测试文本框中是否已有“.”号,如果已有“.”号,将KeyAscii参数值设置为0,使文本框只能输入一个“.”号。
第13、14行代码,如果键盘输入的是其他字符则将KeyAscii参数值设置为0,使文本框不能输入其他字符。
经过以上设置文本框只允许输入数字字符和一个“-”号、一个“.”号,但是能输入中文字符。如果希望限制中文字符的输入,可以在文本框的Change事件中进行设置,如下面的代码所示。
#001 Private Sub TextBox1_Change()
#002 Dim i As Integer
#003 Dim s As String
#004 With TextBox1
#005 For i = 1 To Len(.Text)
#006 s = Mid(.Text, i, 1)
#007 Select Case s
#008 Case ".", "-", "0" To "9"
#009 Case Else
#010 .Text = Replace(.Text, s, "")
#011 End Select
#012 Next
#013 End With
#014 End Sub
代码解析:
文本框的Change事件,判断输入的字符是否为数字字符和“-”号、“.”号,如果不是则使用Replace函数将文本框中输入的其他字符替换成空白。
第5、6行代码在文本框输入的所有字符中循环。
第8行代码列出允许输入的字符。如果想在文本框中允许其它字符输入,在此句代码中列出即可。
第9、10行代码,如果不是允许输入的字符,使用Replace函数替换成空白。
经过以上的设置,文本框中只能在第一位输入一个“-”号、一个“.”号和“0”到“9”的数字。