如何检查TextBox值格式是否类似于28-87222?

时间:2019-02-18 13:12:28

标签: vba

我希望TextBox值的格式类似于Ex:28-87222

我的代码。

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)

     If Not Format(TextBox3.Text, "00" - "00000") Then
        staffLabel.Caption = "Staff ID is invalid."
        TextBox3.SetFocus
    Else
        staffLabel.Caption = ""
    End If

End Sub

3 个答案:

答案 0 :(得分:1)

尝试

 If Not (TextBox3.Text like "##-#####") Then
    staffLabel.Caption = "Staff ID is invalid."
    TextBox3.SetFocus
Else
    staffLabel.Caption = ""
End If

答案 1 :(得分:0)

Format()返回变量或字符串。在您的情况下,在这种情况下,需要一个布尔值。可以将Variant或String转换为布尔值,但这几乎总是返回True-Format Function

通常,要确保该值按照您喜欢的格式进行格式化,请在Textbox()的属性中而不是在代码中使用格式化程序。

如果确定要在代码中完成此操作,然后比较两个值-格式化的值和必须格式化的值:

Option Explicit

Public Sub TestMe()

    Debug.Print checkFormat("1234-23", "####-##")   'True
    Debug.Print checkFormat("1234-523", "####-##")  'False

End Sub

Public Function checkFormat(initialValue As String, neededFormat As String) As Boolean
    checkFormat = CBool(initialValue Like neededFormat)
End Function

答案 2 :(得分:0)

您可以使用Regex并将其放在函数中:

Function IsValidStaffIdNumber(staffId As String)
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")

    regex.Pattern = "[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9]"

    Debug.Print regex.Test(staffId)
End Function

Sub Test()
    IsValidStaffIdNumber ("11-11111")   '~~> TRUE
    IsValidStaffIdNumber ("1-11111")    '~~> FALSE
    IsValidStaffIdNumber ("11-1111")    '~~> FALSE
    IsValidStaffIdNumber ("111-11111")  '~~> FALSE
    IsValidStaffIdNumber ("1A-1B2Cd")   '~~> FALSE
End Sub