Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

Excel: Implementando um Temporizado (Timer)

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.

alt

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)

alt 
(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:=False

End 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 ViewToolbars  e seleccionar a toolbar “Forms”.

alt 
(Figura 2)

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:

António Silva disse...

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.

Fábio Domingos disse...

Mais um excelente e muito útil post.
Abraços.

Unknown disse...

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?



Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject
Google-Translate-ChineseGoogle-Translate-Portuguese to FrenchGoogle-Translate-Portuguese to GermanGoogle-Translate-Portuguese to ItalianGoogle-Translate-Portuguese to JapaneseGoogle-Translate-Portuguese to EnglishGoogle-Translate-Portuguese to RussianGoogle-Translate-Portuguese to Spanish

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico