- 25 Jul 2019 às 10:48
#45996
Milton,
A data 02/03/19 pode ser entendida como 02 de março, ou 03 de fevereiro, dependendo do sistema de apresentação de datas. O americano coloca primeiro o mês, o brasileiro o dia.
O excel não guarda a data em si, com as barras, mês primeiro, ou dia primeiro, etc. Ele guarda um valor, que corresponde à quantidade de dias decorridos desde 00/01/1900 até a data em questão. Hoje, 25 de julho de 2019, para o Excel representa 43.671, tanto no sistema americano, como no brasileiro, que é a quantidade de dias decorridos desde 1900. Você pode ver isso ao digitar uma data na planilha, e depois formatar ela como número.
A parte de barras, mês numérico, mês alfabético, quem vem antes, quem depois, etc, não passa de formatação, assim como podemos formatar o número 123 com 2 decimais, ou sem decimais, ou em notação científica, ou com o sinal de "+" primeiro, ou negativos entre parenteses, etc.
Quando você informa uma data já formatada ao Excel (que é o que a sua macro faz), a diferença entre a formatação americana e brasileira atrapalha pois o Excel tem que "adivinhar" em qual formato a data está sendo informada. Quando você informa essa data pelo seu valor numérico, não existe mais diferença entre os 2, e o Excel sabe que data é aquela.
Quando a data inserida na planilha vem do teclado, por exemplo, o Excel sabe que o formato é dd/mm/aaaa.
Quando essa data vai pra planilha via VBA, o Excel assume que é mm/dd/aaaa (sistema americano). Porém, se o que o Excel acha que é mês, passa de 12 (exemplo, mês 20), o Excel se toca que não pode ser, e conclui que o formato na verdade é dd/mm/aaaa. Assim, datas com dia inferior ou igual a 12, o Excel interpreta mm/dd/aaaa, e dias maiores que 12 interpreta que é dd/mm/aaaa (isso pra datas colocadas na planilha via VBA).
Se o VBA coloca a data na planilha sem formatação, ou seja, o seu valor numérico (em alguns casos isso exigirá formatação na planilha), não há como errar, pois como falei, o valor numérico da data é um só.
Teste assim:
Cells(totalregistro, 7) = datevalue(CDate(TxtDataNascimento.Text))
Obs.: Não sei se o CDate é necessário ou não, porque não sei nada a respeito do TxtDataNascimento, nem de seu conteúdo, por isso o deixei, mas se TxtDataNascimento.Text já contiver uma data em formato numérico, pode tirar tanto o datevalue como o CDate da instrução, pois o CDate passa de valor para data, e o datevalue da data para valor.
Jimmy San Juan
Nas mensagens que te ajudaram de alguma forma, dê seu LIKE: clique no "positivo" (ícone OBRIGADO).
Se o problema está encerrado, por favor, clique em MARCAR RESOLVIDO.