Vídeo recomendado
https://youtu.be/diWPPPhW-9E

v.3 MIGRANDO

Esclarecimentos e dúvidas sob o Modelo de Aplicativo de Cadastro em VBA no Microsoft Excel publicado no site e blog http://www.tomasvasquez.com.br
Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: v.3 MIGRANDO

Mensagem por Mauro Coutinho »

Luiz, a titulo de ajudar e nunca repreender, mas uma das coisas básicas que devemos aprender a usar sempre é a própria ajuda do Excel, no VBA então é imprensindivel, e uma outra coisa é saber um pouco de Ingles, não precisa ser avançado, então, se na tela do VBA você clicar na palavra DoEvents e pressionar F1 lhe será exibido a definição e até exemplos práticos para treinar, então são poucas coisas que não encontramos na ajuda, e se não conseguirmos entender dai vamos para os foruns, até hoje eu ainda uso muito desse recursso.
Quanto a parte do Ingles, é que principalmente no VBA boa parte não tem tradução, mesmo no Office em portugues, mas tendo um básico ja conseguimos alguma coisa, por exemplo palavras como :
IF , THEN, ELSE, FOR, NEXT, são básicas e podem ser traduzidas ao pé da letra, algumaas outras nem sempre, mas vamos a rotina que postou, ficaria assim ;

Dim DataAnterior
Dim x
If IsDate(TextBox1) = True Then => Se o valor no TextBox for Data ou seja Verdadeiro ENTÃO.
'Formata a data como 01/Jan/2002 -Dispensa tradução
'Calcula Idade e joga para TextBox2
TextBox1.Text = Format(TextBox1.Text, "dd/mm/yyyy") =>Aplica a formatação da mesma
Me.TextBox2 = dhAge(Me.TextBox1) 'Coloca o resultado da função dhAge no TextBox2

SENÃO
Else => SENÃO ou seja se não for uma data valida
DataAnterior = TextBox1.Text 'Guarda na Variavel o Valor digitado
TextBox1 = "Data Invalida!!!" 'E prenche o TextBox com frase definida
'temporizador simples para se ler a mensagem de erro
Esse temporizador, com o mesmo já diz, é para se ter tempo de ler oque está no TextBox
Se mudar o Valor de 3000 para 3 você não vai nem perceber que no TexTbox foi escrito Data Invalida
ou seja é o tempo que a mensagem vai ficar na Tela

For i = 1 To 3000 => i = 1 para 3000 ou seja Começa em 1 e só vai parar qdo o contador chegar a 3000
DoEvents
x = x + 1 => Soma + 1 ao contador, não entendi direito o porque de x e não i
Next => Próximo, enquanto i não chegar a 3000 retorna ao incio do For
TextBox1 = DataAnterior => ao terminar, como a Data foi inválida, preenche com o valor que foi armazenado na variável
With TextBox1 =>COM o TextBox execute oque está abaixo, With é usado para não termos de ficar repetindo o que queremos no caso de formtações do TextBox, fonte, tamanho, cor, bordas, etc
.SelStart = 0 => Selecionne do INICIO
.SelLength = Len(TextBox1.Text) =>Selecione o Texto Inteiro (COMPRIMENTO)
End With => Fim COM
Cancel = True
End If =>como IF é uma condição, então FIM SE
End Sub

Deixei o DoEvents para o final, veja a definição com detalhes na ajuda do VBA, mas ele Evita que q ualquer outro procedimento seja executado enquanto não pegarmos o controle do aplictivo de volta, ou seja, junto com o Cancel=True, ficaria assim : Enquanto não for digitado uma Data Válida, nada mais poderá ser executado, por isso, que dependendo do vlaor no TextBox você não consegue ir a diante e pode até travar tudo, até que Cancel seja igual a False.

Resumindo, se a Data digitada for verdadeira, Formata o TextBox, calcula a Idade e sai da rotina sem executar as linhas seguintes.
Por hora é só, espero ter conseguido explicar, acredito que com isso você já consiga interpretar o que fazia as linhas que tirou da rotina, e em outras rotinas tambem.

abraços


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


jovemlima
Consultor
Consultor
Mensagens: 247
Registrado em: Ter Jan 05, 2010 7:20 am

Re: v.3 MIGRANDO

Mensagem por jovemlima »

Mauro ta valendo muito todos os ensinamentos. O que pega é que como estou gatinhando, o basico, já é avançado, mas prometo procurar apostilas na net de vba para iniciantes.
Eu já recorri ao ajuda do excel, mas mesmo tendo exemplos, a logica é que é o desafio.Por exemplo este evendo "DoEvents", estava funcionando muito bem na planilha local, e agora com duas planilhas parou, esta logica é que eu gostaria de abrender como achar o erro, o porque que ele ocorre. Isso vai alem de saber o que o evento faz.
Mas acredite to tentando.
Voce viu que eu contornei o problema, mas não abrendi a resolver o problema em si.

SDS
Luiz


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: v.3 MIGRANDO

Mensagem por Mauro Coutinho »

Luiz, como eu disse, lidar com esse Evento as vezes é meio perigoso, pois ele evita que outros procedimentos sejam executados, então oque pode ter acontecido é que como houve um erro ele ficou definido como TRUE, e como deve ter escolhido SAIR na caixa de Mensgem não foi Retornado ao mesmo a Condição de FALSE que é o padrão de Inicio do mesmo, assim ficou bloqueado o funcionamento.

Da ajuda do Excel :

Atenção Sempre que você ceder temporariamente o processador dentro de um procedimento do evento, certifique-se de que o procedimento não seja executado novamente a partir de uma parte diferente do seu código antes que a primeira chamada retorne, pois isto pode causar resultados imprevisíveis. Além disso, não use DoEvents se houver possibilidade de outros aplicativos interagirem com o seu procedimento de forma imprevisível quando você cedeu o controle.

abraços


jovemlima
Consultor
Consultor
Mensagens: 247
Registrado em: Ter Jan 05, 2010 7:20 am

Re: v.3 MIGRANDO

Mensagem por jovemlima »

Mauro que louco foi só mudar p "i" por "x" e voltou a funcionar.

Valeu.


SDS
Luiz


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: v.3 MIGRANDO

Mensagem por Mauro Coutinho »

jovemlima escreveu:Mauro que louco foi só mudar p "i" por "x" e voltou a funcionar.
Valeu.
SDS
Luiz

Luis, usandoas palavras do Tomas em um tópico em que eu tinha solicitado ajuda :

"As variáveis são poderosas "

Então, agora só falta você compreender o porque deu certo ao trocar "i" por "x", talvez pelo fato de o "i" já estar referenciado como Global e devia estar repetido em outra rotina com outra definição.

abraços


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder