Excel VBA - Разрешить цифры в строке - PullRequest
0 голосов
/ 15 июня 2019

Я использую эту функцию, чтобы запретить пользователям вводить специальные символы, но я также надеюсь, что пользователи смогут вводить только 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

Ответы [ 2 ]

1 голос
/ 16 июня 2019

Если вы не хотите загружать справочную библиотеку регулярных выражений, вы можете использовать позднюю привязку.

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
0 голосов
/ 16 июня 2019

Вот версия без регулярных выражений:

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

Ищет строку, начинающуюся с чего-то другого, кроме числа, за которым следуют буквы и цифры. После этого он проверяет, что нет трех последовательных чисел.

Сказав это, не делай так. Это и есть цель регулярных выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...