Конечно, просто установите 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