O validador de dados do MS Excel não aceita chamadas para a macro personalizada

2

Eu tenho a macro VB de trabalho que valida o conteúdo. São necessários dois parâmetros de string (valor de célula e expressão regular) e retorna True ou False. Usa CreateObject("VBscript.regexp") internamente.

Eu preciso usar essa macro para validar a célula. Quando tento configurá-lo como um validador personalizado da maneira como

=Rex(E2, "\d{1,2}\:\d{2}")

onde Rex é minha função definida na mesma planilha (Alt-F11 e tipo) e E2 é uma célula que estou tentando validar, recebo a mensagem "Um intervalo nomeado especificado não pode ser encontrado".

Se eu inserir a mesma função em qualquer outro lugar na mesma planilha (digamos, na célula A1 do canto superior):

=Rex(E2, "\d{1,2}\:\d{2}")

o me mostra bem TRUE se a célula E2 corrigir o valor correto como 15:07 e FALSE se não gostar 15xx - meio resolvido mas na verdade não até o final. Eu realmente preciso integrar meu validador de maneira padrão.

Estou usando o MS Excel 2010. A macro em si é

Public Function Rex(ByVal vsStringIn As String, ByVal vsPattern As String) As Boolean
    Dim objRegEx As Object
    Set objRegEx = CreateObject("VBscript.regexp")

    objRegEx.Global = True
    objRegEx.Pattern = vsPattern

    Rex = objRegEx.Test(vsStringIn)
    Set objRegEx = Nothing
End Function

E o problema parece

    
por h22 28.01.2013 / 14:35

2 respostas

1

Problema interessante. Parece que as UDFs nem sempre funcionam na validação de dados! : - (

Seguindo alternativas:

  • Use a formatação condicional e simplesmente realce qualquer valor errado
  • Use uma fórmula normal do Excel em vez de sua regex para fazer a validação. No seu caso,
    =IFERROR(IF(SEARCH(":",D3),AND(ISNUMBER(VALUE(LEFT(D3,SEARCH(":",D3)-1))),ISNUMBER(VALUE(RIGHT(D3,LEN(D3)-SEARCH(":",D3))))),FALSE),FALSE)
    fará o trabalho. Não é legal, mas pelo menos funcional! ; -)

Nota lateral: nem sua UDF nem a fórmula acima funcionarão, se o valor a ser verificado for um número (com o formato da hora) e não uma string!

    
por 28.01.2013 / 15:32
0

Eu sei que é uma pergunta antiga, mas não quero duplicar a pergunta.

Solução: você pode aplicar a fórmula UDF em uma célula diferente e usar esse valor na Validação de dados. Você pode ocultar o valor temporário apenas mudando a cor para branco.

Para mais informações: link

    
por 07.08.2013 / 22:47