Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
  • Avatar do usuário
  • Avatar do usuário
Avatar do usuário
Por miltonleandro
Posts Avatar
#45968
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?
Avatar do usuário
Por Jimmy
Avatar
#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
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord