如何强制在userform上输入文本框作为VBA中的特定格式

时间:2016-08-03 15:29:34

标签: vba input textbox controls

我有一个带有一系列输入文本框的用户表单,我正在寻找一种方法来防止用户输入除5位数后跟一个字母后跟4位数字以外的任何内容。例如。 12345A6789

我可以看到一种方法,只使用数字和字母,并创建三个文本框,然后以某种方式将它们合并在一起 - 虽然不知道如何做到这一点。理想情况下,只有一个文本框。

感谢任何帮助

2 个答案:

答案 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