Notifications
Clear all

Parar Application OnTime em Contagem regressiva

2 Posts
2 Usuários
0 Reactions
1,113 Visualizações
(@eduffr91)
Posts: 0
New Member
Topic starter
 

Ola, Boa noite Sou novo no Forum e leigo em Visual Basic.
Tenho a seguinte situacao.

Criei uma planilha, que o usuario lancara informacoes , e ao terminar de lancar as informacoes, o macro chamara uma contagem regressiva que definira 20 minutos (ou quanto eu definir no codigo) para lancar a informacao novamente. Se o tempo zerar, chamara um alarme.
Beleza, consegui fazer a planilha, e funcionou em todas as condicoes, com uma excecao:
O usuario vai lancar as informacoes antes de terminar o tempo. Se ele fizer isso, o relogio resseta e inicia uma nova contagem. EIS O PROBLEMA: Esta nova contagem que se inicia, acaba acumulando dois, tres , quatro, comandos do application OnTime, da forma que pula os segundos.
Exemplo: No Primeiro clique de Reset, ele desconta de 1 em 1 segundo, no segundo de 2 em 2 segundos, no terceiro de 3 em 3, e assim sucessivamente.
Obs: Ja tentei Exit Sub em todos os locais possiveis e nao funcionou.
Obs2: Perdao pelo texto sem acentuacao , estou com problemas no teclado.

Segue codigo do modulo:

Dim Inicio As Boolean
Dim Tempo As Date


Sub MeuRelogio()
If Inicio = True Then
If Tempo = TimeValue("00:00:00") Then
Call TocarAlarme

Else
Sheets("home").Range("a1") = Tempo
Application.OnTime Now() + TimeValue("00:00:01"), "MeuRelogio"
Tempo = Tempo - TimeValue("00:00:01")
End If
End If
End Sub

Sub IniciarContagem()

If Tempo > TimeValue("00:00:00") Then
Inicio = True
Call MeuRelogio

Else
Inicio = False
End If
End Sub


Sub ResetarContagem()
Tempo = TimeValue("00:20:00")
Call IniciarContagem
Call Salvar
End Sub

Agradeco muito se puderem me ajudar

Abracos

 
Postado : 06/03/2018 8:47 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

eduffr91,

Bom dia!

Acredito que sria o caso, no seu código, antes de resetar o tempo para começar de novo, você primeiro chamar uma rotina que encerre o on time anterior, não?

Desse modo, seria algo mais ou menos assim:

Sub ResetarContagem()
     Call CancelaOnTime
     Tempo = TimeValue("00:20:00")
     Call IniciarContagem
     Call Salvar
End Sub
Public Sub CancelaOnTime()
    Application.OnTime EarliestTime:=Now, Procedure:="MeuRelogio", Schedule:=False
End Sub

Outra coisa: da próxima vez que postar códigos VBA aqui no fórum, solicitamos, por gentileza, usar a ferramenta CODE que fica localizada logo acima da caixa de mensagens.

 
Postado : 10/03/2018 8:34 am