sexta-feira, 23 de setembro de 2016

Executando uma macro a cada 'n' minutos.

Recentemente tive necessidade de utilizar um meio de executar uma rotina no Excel a cada 5 segundos. Fuçando, cheguei no Application.OnTime.


Para um exemplo simples, vou utilizar um botão para marcar o início da atividade e outro botão para marcar o fim.

Quando clicar em Iniciar, quero que uma rotina, chamada AtualizarHora seja executada a cada 3 segundos.

Clicando em Parar, quero que a rotina deixe de ser executada.

Eis os códigos:
'
' Utilizaremos uma variável pública para controlar a execução da rotina desejada.
'
Public bExecutar As Boolean

Sub Botão1_Clique()
'
' Iniciar contagem de tempo gravando a hora atual em B2. Como vamos iniciar, apagamos qualquer
' vestígio que tenha na C3 e D3
Cells(2, 2) = Time()
Cells(3, 2).Clear
Cells(4, 2).Clear
'
' Libera a execução
'
bExecutar = True
'
' Aqui é onde programamos o Excel para executar nossa rotina
'
Application.OnTime EarliestTime:=Now + TimeValue("00:00:03"), Procedure:="AtualizaHora"
End Sub



Sub AtualizaHora()
'
' Se execução estiver liberada, reprograma a rotina
'
If bExecutar Then
   Application.OnTime EarliestTime:=Now + TimeValue("00:00:03"), Procedure:="AtualizaHora"
End If

Cells(3, 2) = Time()                                       ' Grava a hora atual
Cells(4, 2) = Cells(3, 2) - Cells(2, 2)             ' Apresenta quantidade de tempo já decorrido
End Sub

Sub Botão2_Clique()
'
' Parar contagem
'
bExecutar = False                                         ' Ajusta variável de controle para falso
'
' Reprograma a rotina para ser executada imediatamente
'
Application.OnTime EarliestTime:=Now, Procedure:="AtualizaHora"

End Sub

Nenhum comentário:

Formatar texto numérico com zeros à esquerda

Sempre aparace uma necessidade de colocar zeros à esquerda em textos que representam números. Exemplo clássico é transformar o número que ...