1

Я использую этот макрос для идентификации ячеек, которые содержат не алфавитно-цифровые символы:

Function RegExCheck(objCell As Range, strPattern As String)

    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")
    RegEx.Global = True
    RegEx.Pattern = strPattern

    If RegEx.Replace(objCell.Value, "") = objCell.Value Then
        RegExCheck = 0
    Else
        RegExCheck = 1
    End If

End Function

В этом примере я могу указать символы, которые я ищу, в самой ячейке:

=RegExCheck(A1,"[^A-Za-z0-9_-]")

Поскольку символы, которые я ищу в каждой ячейке, одинаковы, можно ли добавить "[^A-Za-z0-9_-]" в модуль макроса и просто использовать =RegExCheck(A1) для выводить результаты?

1 ответ1

3

Конечно, просто установите strPattern внутри функции:

Function RegExCheck(objCell As Range)
Dim strPattern As String
strPattern = "[^A-Za-z0-9_-]"
... [rest of code] ...
End Function

Или вы можете вообще пропустить другую переменную и сделать:

Function RegExCheck(objCell as Range)
...
RegEx.Pattern = "[^A-Za-z0-9_-]"
...
End Function

Но я рекомендую сохранить переменную, как в моем первом примере. Это облегчает повторное использование этого шаблона в функции и является логичным местом для проверки ... вместо того, чтобы читать строки кода в поисках вашего шаблона. (Это более применимо для более длинных функций / сабов, но IMO - лучшая практика).

Редактировать: Вы на самом деле не спрашивали, но, к вашему сведению, вы также можете сохранить шаблон в ячейке (скажем, B1) и ссылаться на эту ячейку, чтобы получить шаблон. Это позволит вам относительно быстро изменить шаблон, если вам нужно:

Function RegExCheck(objCell as Range, patternCell as Range)
...
RegEx.Pattern = patternCell.Value
....
End Function

Но когда вы вызываете это, убедитесь, что привязали ссылку на patternCell , т.е. =REGEXCHECK(A1,$B$1)

Редактировать: чтобы быть явным, это должно работать:

Function RegExCheck(objCell As Range)
    Dim strPattern As String
    strPattern = "[^A-Za-z0-9_-]"
    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")
    RegEx.Global = True
    RegEx.Pattern = strPattern

    If RegEx.Replace(objCell.Value, "") = objCell.Value Then
        RegExCheck = 0
    Else
        RegExCheck = 1
    End If

End Function

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .