我有一个带有一系列输入文本框的用户表单,我正在寻找一种方法来防止用户输入除5位数后跟一个字母后跟4位数字以外的任何内容。例如。 12345A6789
我可以看到一种方法,只使用数字和字母,并创建三个文本框,然后以某种方式将它们合并在一起 - 虽然不知道如何做到这一点。理想情况下,只有一个文本框。
感谢任何帮助
答案 0 :(得分:1)
内置的Textbox
在这个部门有点缺乏。我接近这个的方法是使用Change
事件来强制格式化。请注意,Key *事件不会处理将文本导入文本框的任何其他方法(拖放,复制粘贴等)。沿着这些方向的东西(这是针对zip + 4,但类似的概念可行):
Private Sub TextBox1_Change()
Static reentry As Boolean 'anti-recursion flag
If reentry Then Exit Sub
Dim chars() As Byte
chars = StrConv(TextBox1.Text, vbFromUnicode)
Dim buffer As String
Dim i As Integer
For i = LBound(chars) To UBound(chars)
If Len(buffer) = 5 Then buffer = buffer & "-" 'auto-insert the dash
If Len(buffer) = 10 Then Exit For 'limit to 10 chars
If chars(i) >= 48 And chars(i) <= 57 Then 'ignore anything but numbers.
buffer = buffer & Chr$(chars(i))
End If
Next i
reentry = True
TextBox1.Text = buffer
reentry = False
End Sub
答案 1 :(得分:0)
我想出了一个可行的解决方案,我确信可以改进这个以防止用户输入特殊字符,但这样可以很好地减少大多数错误
'Checks that document number is the correct format (5 digits, 1 letter, 4 digits)
Sub TextBox_DocumentNumber_AfterUpdate()
If (IsNumeric(Left(TextBox_DocumentNumber, 5))) = False Then
Call DocumentNumberFormat
ElseIf (IsNumeric(Mid(TextBox_DocumentNumber, 7))) = True Then
Call DocumentNumberFormat
ElseIf (IsNumeric(Right(TextBox_DocumentNumber, 4))) = False Then
Call DocumentNumberFormat
End If
End Sub
Sub DocumentNumberFormat()
Dim DocNum As String
Dim Response As VbMsgBoxResult
DocNum = MsgBox("Please enter document numbers in the formart 00000-A-0000", vbRetryCancel + vbExclamation, "Incorrect Format")
UserForm3.TextBox_DocumentNumber = ""
If DocNum = vbCancel Then
Call Cancel
End If
Exit Sub
End Sub
'Auto inserts hyphens and sets max length for document number
Private Sub TextBox_DocumentNumber_Change()
If Len(TextBox_DocumentNumber) = 5 Then TextBox_DocumentNumber = TextBox_DocumentNumber & "-"
If Len(TextBox_DocumentNumber) = 7 Then TextBox_DocumentNumber = TextBox_DocumentNumber & "-"
TextBox_DocumentNumber.MaxLength = 12
End Sub