Шаблон RegEx c цифра c в Excel VBS - PullRequest
3 голосов
/ 12 марта 2020

У меня нет большого опыта в RegEx, и мне нужен совет для создания определенного c шаблона в Excel VBA.

Шаблон, с которым я хочу сопоставить для проверки поля Userform: nnnnnn.nnn.nn, где n - это 0-9 di git.

Мой код выглядит так, но Reg.Test всегда возвращает false.

    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")
    With RegEx
        .Pattern = "/d/d/d/d/d/d\./d/d/d\./d/d"
    End With
    If RegEx.Test(txtProjectNumber.Value) = False Then
        txtProjectNumber.SetFocus
        bolAllDataOK = False
    End If

Ответы [ 2 ]

3 голосов
/ 13 марта 2020

VBA получил собственную встроенную альтернативу под названием оператор Like. Таким образом, помимо того факта, что вы допустили ошибку с косыми чертами вместо обратных (как справедливо упомянуто @SJR), вы должны взглянуть на что-то вроде:

If txtProjectNumber.Value Like "######.###.##" Then

Где # обозначает любой одиночный ди git (0–9). Хотя он и не так универсален, как использование регулярных выражений, он, похоже, поможет вам. Таким образом, вам не нужно будет использовать ни внешнюю ссылку, ни дополнительный объект.

3 голосов
/ 13 марта 2020

Попробуйте это. Вы должны соответствовать всему содержимому текстового поля (я полагаю), поэтому используйте якоря (^ и $).

Ваши косые черты были неправильными. Также вы можете использовать квантификаторы для упрощения шаблона.

Private Sub CommandButton1_Click()
  Dim RegEx As Object, bolAllDataOK As Boolean
    Set RegEx = CreateObject("VBScript.RegExp")
    With RegEx
        .Pattern = "^\d{6}\.\d{3}\.\d{2}$"
    End With
    If Not RegEx.Test(txtProjectNumber.Value) Then
        txtProjectNumber.SetFocus
        bolAllDataOK = False
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...