Claro, basta definir strPattern
dentro da função:
Function RegExCheck(objCell As Range)
Dim strPattern As String
strPattern = "[^A-Za-z0-9_-]"
... [rest of code] ...
End Function
Ou você pode pular usando outra variável e fazer:
Function RegExCheck(objCell as Range)
...
RegEx.Pattern = "[^A-Za-z0-9_-]"
...
End Function
Mas eu recomendo manter a variável como no meu primeiro exemplo. Isso facilita a reutilização desse padrão dentro da função e é um local lógico a ser verificado ... em vez de ter que ler linhas de código procurando seu padrão. (Isso é mais aplicável para funções / subs mais longas, mas o IMO é uma prática recomendada).
Edit: Você realmente não perguntou, mas para FYI você também pode armazenar o padrão em uma célula (digamos B1
) e fazer referência a essa célula para obter o padrão. Isso permitiria que você alterasse o padrão relativamente rapidamente se precisar:
Function RegExCheck(objCell as Range, patternCell as Range)
...
RegEx.Pattern = patternCell.Value
....
End Function
Mas quando você chama isso, certifique-se de ancorar a referência patternCell
, ou seja, =REGEXCHECK(A1,$B$1)
Editar: para ser explícito, isso deve funcionar:
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