Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-允许字符串中的数字_Excel_Vba - Fatal编程技术网

Excel VBA-允许字符串中的数字

Excel VBA-允许字符串中的数字,excel,vba,Excel,Vba,我使用此功能来限制用户输入特殊字符,但我也希望允许用户只输入2位数字,如果他们想与字母一起输入的话。这可能吗 Public Function IsAlpha(strValue As String) As Boolean IsAlpha = strValue Like WorksheetFunction.Rept("[-a-zA-Z ]", Len(strValue)) And _ Len(strValue) = Len(Application.Trim(strValue))

我使用此功能来限制用户输入特殊字符,但我也希望允许用户只输入2位数字,如果他们想与字母一起输入的话。这可能吗

Public Function IsAlpha(strValue As String) As Boolean
    IsAlpha = strValue Like WorksheetFunction.Rept("[-a-zA-Z ]", Len(strValue)) And _
       Len(strValue) = Len(Application.Trim(strValue))
End Function

如果不想加载regex引用库,可以使用后期绑定

Public Function IsAlpha(strValue As String) As Boolean
    Dim rgx As Object
    Set rgx = CreateObject("vbscript.regexp")

    With rgx
        .Global = False
        .Pattern = "^[A-Z]*[0-9]?[A-Z]*[0-9]?[A-Z]*$"
        .IgnoreCase = True
        .MultiLine = False
        IsAlpha = .Test(strValue)
    End With
End Function

下面是一个没有正则表达式的版本:

Public Function IsAlpha(strValue As String) As Boolean
    IsAlpha = strValue Like "[-a-zA-Z]" & _
        WorksheetFunction.Rept("[-a-zA-Z 0-9]", Len(strValue) - 1) _
        And _
        Len(strValue) = Len(Application.Trim(strValue)) _
        And _
        Not strValue Like "*[0-9][0-9][0-9]*"
End Function
它查找一个字符串,该字符串的开头不是数字,后面是字母和数字。之后,它会检查是否没有三个连续的数字


话虽如此,但不要这样做。这正是正则表达式的用途。

最好的选择是正则表达式。我记得你不久前问过一个类似的问题。对于用户输入的文本是否可以以数字或连字符开头,您是否也有条件?是的,它应该只以字母开头。。。我相信正则表达式需要VBA中的一个特殊引用,我正在努力避免您打开后期绑定时不需要引用库预加载正则表达式?好的,如果它与Excel 2007及以后兼容,这似乎对我有效,只要您不需要在Mac上运行它