Vídeo: condição para data com vba 2025
A função IsDate do VBA supostamente diz se uma string de texto pode ser interpretada como uma data. Por exemplo, todas as seguintes expressões avaliam como True:
IsDate ("5/25/2015") IsDate ("16 de janeiro") IsDate ("12-1") IsDate ("12/1/15") IsDate ("2/30") IsDate ("30/2")
Nos dois últimos exemplos, observe que IsDate não é exigente sobre a ordem do dia e mês. Ambas essas seqüências de caracteres podem ser interpretadas como uma data, então IsDate retorna True (independentemente das configurações do formato da data do sistema).
Veja algumas informações de um artigo de suporte da Microsoft:
As funções de data do VBA IsDate, Format, CDate e CVDate utilizam uma função encontrada na automação OLE (OleAut32. Dll). Esta função procura todos os formatos de data possíveis tokenizando cada um dos valores separados na cadeia que representa a data e retorna um valor booleano que indica se a entrada pode ser representada como uma Data.
Isto é importante lembrar ao usar a função para interpretar uma data que contém um ano de 2 dígitos. Diferentes Locais usam vários formatos de data (ou seja, mm / dd / aa, yy / mm / dd, " DD MMM YY " , " YY MMM DD " , e assim por diante) e, portanto, a função tenta os dígitos em todas as posições até que a função tenha encontrado uma data válida ou esgotado todas as possibilidades.
Apenas porque o IsDate reconhece uma seqüência de caracteres como uma data não significa que a string pode ser convertida de forma confiável em uma data. Em alguns casos, o resultado é ambíguo. Por exemplo, e essa expressão?
IsDate ("29-Feb-01")
29 de fevereiro de 2001 não é uma data válida. No entanto, esta expressão retorna True porque 1 de fevereiro de 1929 (e 2 de janeiro de 1929) são datas válidas. E assim são as mesmas datas em 2029.
Uma busca pela documentação do IsDate apareceu vazia. Com base no teste, o IsDate aceita qualquer um dos seguintes caracteres separadores: uma barra (/), um hífen (-), uma vírgula (,), um ponto (.) E um espaço.
Portanto, as seguintes expressões retornam True:
IsDate ("5. 1") IsDate ("30 6") IsDate ("30, 6") IsDate ("1/2")
Mas então há essa anomalia: as seguintes expressões retornam True:
IsDate ("5. 1. 5") IsDate ("5. 1. 05")
No entanto, inexplicavelmente, essa expressão retorna False:
IsDate ("5. 1. 2005")
Suponha que você criou um UserForm com uma InputBox onde o usuário insere uma data. Deve ficar claro que usar o IsDate para validar a entrada não é muito confiável.
As coisas ficam ainda mais confusas quando percebe que IsDate também cobre valores de tempo. (Não há nenhuma função correspondente de IsTime). Então, as seguintes expressões retornam True:
IsDate ("4: 45") IsDate ("4. 45") IsDate ("4 45") IsDate ("4/45 ") IsDate (" 23: 59 ")
Essas expressões retornam False:
IsDate (" 4: 60 ") IsDate (" 24. 45 ")
É importante ressaltar que o IsDate não exiba todas essas peculiaridades quando você passa um argumento Range. Por exemplo:
IsDate (Range ("A1"))
Parece que o IsDate é perfeitamente confiável na identificação de células que contém uma data ou uma hora. Não identifica, por exemplo, uma célula que contenha 5. 1 como data. Se seu código precisa determinar se uma string pode ser interpretada como uma data, a melhor solução é colocar essa string em uma célula e, em seguida, escrever um código para verificar o conteúdo da célula.
