Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
v.3 MIGRANDO
- Mauro Coutinho
- 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
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
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
Re: v.3 MIGRANDO
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
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
- Mauro Coutinho
- 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
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
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
- Mauro Coutinho
- 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
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