Eu acho uma inconsistência estranha ao copiar e colar datas no MS Excel, quando eles têm um ano de 2 dígitos. Eu trabalho em uma máquina Windows 7 Enterprise 64 bit e meu Excel é uma versão de 2010.
DESCRIÇÃO DO PROBLEMA: se eu escrever uma data curta em qualquer aplicativo (digamos o Bloco de Notas), e eu copiar isso para o Excel, o ano será interpretado incorretamente após 2029. Exemplos:
- Eu escrevo "12/01/29" no bloco de notas e copie e cole este valor no MS Excel: a data será interpretada como "12/01/2029".
- Eu escrevo "12/01/31" no bloco de notas e copie e cole esse valor no MS Excel: a data será interpretada como "12/01/1931" (em vez de "12/01/1931").
PESQUISA 1 - painel de controle: Após a primeira pesquisa, encontrei uma opção na configuração Painel de Controle / Datas, dizendo que "se um ano for inserido com 2 dígitos, ele será incluído entre 1997 e 2096". Imagem abaixo (está em francês, minha linguagem de sistema, mas o conteúdo é o que eu descrevi):
No entanto, mesmo que essa configuração me leve a esperar uma conversão adequada do caso de teste acima, não é assim.
INVESTIGAÇÃO ADICIONAL - VBA: O VBA geralmente herda as configurações do aplicativo de hospedagem (MS Excel no meu caso), que está herdando a configuração do sistema. Por exemplo, se o idioma do sistema for francês, significa que o mês de "dezembro" é escrito como "dezembro". Então, se eu escrever isso, vai funcionar: myDate = DateValue("11-déc-12")
, enquanto se eu escrever isso não vai funcionar: myDate = DateValue("11-dec-12")
. Isto é claramente porque o VBA herda a linguagem do sistema, por isso reconhece "décembre" (francês) e não "dezembro" (inglês).
No entanto, se eu escrever isso:
myDate = DateValue("12/01/31")
o valor será interpretado corretamente como 12/01/2031
.
MAIS INFORMAÇÕES: digitando manualmente "12/01/31" em uma célula do Excel será devidamente convertido em 2031. Assim, parece que o problema surge apenas em copiar e colar .
MINHA PERGUNTA: Parece que há uma inconsistência entre as configurações. Alguém poderia me levar para o local adequado para corrigir esse problema uma vez para sempre e certifique-se de que a configuração "se um ano for inserido com 2 dígitos, será entre XXXX e YYYY" por favor? Agradeço antecipadamente, não hesite em pedir mais detalhes, se necessário.
=DATEVALUE("1/1/31")
sempre retornará 11324. Mostrada como data, isso resulta em 1-1-1931.
MsgBox myDate
Eu vejo a data correta. No entanto, eu tinha dado a dica do VBA apenas para mostrar a inconsistência, mas eu concordo com você que a solução para este rebote não está mentindo lá!