Em quase todas as linguagens de programação existem timers que permitem executar código num determinado tempo ou com uma determinada frequência. No Excel, e com a utilização do VBA, também é possível implementar um timer permitindo executar as mais diversas funções num determinado tempo ou frequência como por exemplo, verificar novos dados, gravar a folha de cálculo, impressão de dados, etc, etc.
Para mostrar mais facilmente a implementação do timer vou mostrar como colocar a hora actual numa determinada célula, com o intervalo de 1 segundo.
O objectivo é explicar a implementação mas no entanto é importante lembrar que uma frequência muito alta poderá diminuir o desempenho da folha de cálculo.
Para adicionarmos esta função a uma folha de Excel devemos fazer o seguinte:
1 – Menu Tools – Macros – Visual Basic Editor ou ALT+F11
2 – Adicionar um novo módulo clicando com o botão direito ou através do menu Insert (Figura 1)
3 – Colocar a seguinte código no módulo criado:
' Procedimento que inicia o temporizado
Public Sub StartTimer()' No tempo (tempo actual + 1 segundo) executa o procedimento "RunTimer" Application.OnTime EarliestTime:=Time + TimeValue("00:00:01"), Procedure:="RunTimer"
End Sub
' Para o temporizado
Public Sub StopTimer()' Ignora os error que possam existir
On Error Resume Next' No tempo (tempo actual + 1 segundo) executa o procedimento "RunTimer"
‘ e para através do parâmetro Schedule = False, que indica
' que já não volta a executar novamente
Application.OnTime EarliestTime:=Now + TimeValue("00:00:01"), Procedure:="RunTimer", Schedule:=FalseEnd Sub
' Executa no tempo definido
Public Sub RunTimer()' Ignora os error que possam existir
On Error Resume Next' Coloca a hora actual na Worksheet "Sheet1", célula "B1"
Worksheets("Sheet1").Range("B1").Value = Time' Chama novamente a procedimento
Application.OnTime EarliestTime:=Now + TimeValue("00:00:01"), Procedure:="RunTimer"End Sub
4 – De seguida na folha de cálculo (“Sheet1”) colocamos dois botões da toolbar (Figura 2). Para que esta toolbar seja visível devemos ir a View – Toolbars e seleccionar a toolbar “Forms”.
Quando o botão é inserido é possível associar uma macro e devemos seleccionar um para “StartTimer” e o outro para “StopTimer”. Pode-se ainda seleccionar o botão inserido da toolbar com o botão direito do rato e associamos a macro posteriormente.
Finalmente é só utilizar os botões para iniciar e parar o temporizado/relógio.
Pode-se também tornar este processo automático na abertura da folha de cálculo. Para isso no objecto ThisWorkbook, no editor de código, devemos colocar o seguinte:
' Para o temporizado antes de fechar a folha de cálculo
Private Sub Workbook_BeforeClose(Cancel As Boolean)Call StopTimer
End Sub
' Iniciar o temporizado no arranque da folha de cálculo
Private Sub Workbook_Open()Call StartTimer
End Sub
Como referido inicialmente, este é um exemplo de implementação de um temporizado no Excel que poderá ser adaptado a diversas situação e, com certeza, com muita utilidade.
PS: Como sempre, qualquer dúvida, comentário ou correcção ao artigo é sempre bem vinda!
3 comentários:
Em VB 6.0 e VB.net é mais simples (embora este pequeno código não seja difícil), porque existe um objecto chamado timer.
Mais um excelente e muito útil post.
Abraços.
Amigo.. gostei muito do codigo.. mas preciso fazer uma alteração mas nao sei bem como....
eu preciso fazer que depois que o relogio é parado (por 30segundos por exemplo), quando startado de novo, ele volta a contar de onde parou, da forma que esta quando executa de novo ele atualiza o relogio (ignorando a pausa realizada)...
consegue me ajudar?
Enviar um comentário