Posso codificar parâmetros diretamente nesta macro ou tenho que adicioná-los em cada célula?

1

Estou usando essa macro para identificar células que contêm caracteres não alfanuméricos:

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

Neste exemplo, posso especificar os caracteres para os quais estou procurando na própria célula:

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

Como os caracteres para os quais estou pesquisando em cada célula são os mesmos, há uma maneira de adicionar o "[^A-Za-z0-9_-]" no módulo de macro e simplesmente usar =RegExCheck(A1) para gerar os resultados?

    
por user2258740 18.09.2018 / 23:36

1 resposta

3

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
    
por 18.09.2018 / 23:38