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
Por topscore
Posts
#69007
Pessoal, seguinte:

No meu formulário, Textbox: TBVctoPrim. É data (dd/mm/aaaa). Já está formatada para colocar só números, coloca as "/", uso Cdate para colocar no excel, tudo certo. Meu problema é verificar erros, se o usuário não colocou uma data nada a ver, o que acontece bastante sabe deus como eles conseguem.
Hoje, num "AfterUpdate" jogo ela no excel e faço uma série de cálculos. Ele verifica se a data é válida e se o ano está entre 2011 e 2050. Depois apaga o value e avisa que a data é inválida, ou passa para a próxima textbox se estiver correta. Mas é bem chato e trabalhoso.

Tem como fazer essa verificação direto no VBA, no AfterUpdate da textbox?
Seria assim:
21/13/2022: Msgbox "Data inválida" (e apaga o valor da textbox)
33/01/2022: idem
21/02/202: idem
21/02/2010: idem (por causa do ano < 2011)
21/02/2051: idem (por causa do ano > 2050)
***30/02/2022: Nesse caso específico, já corrige para 28/02/2022

E se estiver certo, end sub e passa para a outra textbox.
Faço tudo isso na planilha, mas é muito trabalho, e tenho várias textbox com datas.
Se alguém pudesse me passar esse código, ajudaria muito mesmo.

Desde já, Obrigado.
Avatar do usuário
Por JCabral
Avatar
#69009
Caro topscore

Julgo que fica mais fácil , quando se trabalha com datas, utilizar um "Datepicker" e assim a introdução de datas é sempre feita da mesma forma.
Deixo-te aqui um exemplo que é o que eu utilizo, sendo que a Textbox das datas está sempre trancada "Locked=True"

Assim a única coisa que precisas de fazer é copiar a Form, "CalendarForm" para o teu projeto e utilizares conforme o exemplo que anexo, qualquer duvida diz.
Você não está autorizado a ver ou baixar esse anexo.
Avatar do usuário
Por fcarlosc2018
Posts Avatar
#69013
Boa-tarde

Tente assim:
Código: Selecionar todos
Private Sub TBVctoPrim_Exit(ByVal Cancel As MSForms.ReturnBoolean)

If TBVctoPrim.Text = "" Then
Exit Sub
End If

If IsDate(TBVctoPrim.Text) Then
    TBVctoPrim.Text = CDate(TBVctoPrim)
Else
    MsgBox ("Data Inválida !"), vbInformation, "Atenção!"
    Cancel = True
    TBVctoPrim.Text = ""
    TBVctoPrim.SetFocus
End If

End Sub
topscore agradeceu por isso
Por topscore
Posts
#69014
fcarlosc2018, obrigado, já vou testar seu código, pois vou usar o calendário do JCabral em alguns casos. Em outros vou precisar que ele corrija desse jeito mesmo. Ex Nascimento do cliente, mais fácil ele colocar a data que navegar pela seta até 1978 por ex.

JCabral , excelente, vai mudar completamente a maneira de trabalhar com datas.
Mas estou tendo dificuldade na "saída" da data escolhida.
Na sua planilha, o Formulário é "MyForm", a textbox é "TheDate".
Meu formulário é "AFInicial", com muitos objetos, é o formulário principal do sistema. Minha textbox: "TBDInicio1". Ao lado da TBDInicio1 coloquei o botão para abrir o calendário, com o seguinte código:
Código: Selecionar todos
Dim myDate As Date
myDate = CalendarForm.GetDate(Language:="pt", FirstDayOfWeek:=Monday, SaturdayFontColor:=RGB(250, 0, 0), SundayFontColor:=RGB(250, 0, 0))
If myDate > 0 Then
Me.TBDInicio1.Value = Format(Me.TBDInicio1, "dd/mm/yyyy")
End If
Agora, nos códigos do CalendarForm, não consigo achar de jeito nenhum onde está definido que ele vai colocar a data escolhida em "TheDate". E não consigo definir que agora ele vai colocar a data em TBDInicio1.

Vc sabe me dizer onde consigo definir isso?

Obrigado.
Avatar do usuário
Por JCabral
Avatar
#69017
Experimente assim:
Código: Selecionar todos
Dim myDate As Date
myDate = CalendarForm.GetDate(Language:="pt", FirstDayOfWeek:=Monday, SaturdayFontColor:=RGB(250, 0, 0), SundayFontColor:=RGB(250, 0, 0))
If myDate > 0 Then
Me.TBDInicio1.Value = Format(myDate, "dd/mm/yyyy")
End If
topscore agradeceu por isso
Por topscore
Posts
#69019
JCabral, Funcionou perfeitamente, obrigado. Tenho outros textbox nesse formulário, onde vou colocar esse botão para abrir o calendário. troquei "TBDInicio1" pelo nome do textbox e funcionou.
O código do fcarlosc2018 também funcionou, onde vou deixar o usuário colocar a data (que deus me acuda) ele arruma imediatamente.

Obrigado a ambos.
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