Página 1 de 1

Data invertida excel vba

Enviado: 25 Jul 2019 às 07:28
por miltonleandro
Bom dia pessoal.

Estou com um probleminha, se alguém puder ajudar eu agradeço.

Tenho um banco de dados em excel, hoje com 600 nomes e sempre é incluso mais, em novas inclusões de dados a data grava corretamente no fomato "dd/mm/yyyy",

Eu uso a função CDate para não inverter.
Cells(totalregistro, 7) = CDate(TxtDataNascimento.Text)

Porém com o passar do tempo as datas se invertem para "mm/dd/yyyy". Não sei o motivo,

Tem alguma forma de corrigir isso?

Data invertida excel vba

Enviado: 25 Jul 2019 às 07:40
por JCabral
Miltonleandro

Lê a explicação do Osvaldo nesse tópico : viewtopic.php?f=12&t=9923

Tentei da seguinte forma, e resultou:
Código: Selecionar todos
Cells(totalregistro, 7) = Format (CDate(TxtDataNascimento.Text), "dd/mm/yyyy")
Cells(totalregistro, 7) = Format (Cells(totalregistro, 7) , "dd/mm/yyyy")

Re: Data invertida excel vba

Enviado: 25 Jul 2019 às 10:48
por Jimmy
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