Atualização segundo a segundo no Excel

Às vezes gostaríamos que, ao usar a função =AGORA() do Excel, que o Excel atualizasse a mesma automaticamente, para termos a data e a hora segundo a segundo dentro do Excel (apenas por diversão, claro). Ou seja: queremos uma atualização segundo a segundo da nossa planilha.

Coloque em uma célula qualquer a função

=AGORA()

Entre no Editor do Visual Basic (Fica no menu de Macros: no Excel 2003 é no menu Ferramentas, opção Macro e escolha Editor do Visual Basic, já no Excel 2010, use o atalho Alt+F11)

No Editor do Microsoft Visual Basic escolha, no menu Inserir, a opção Módulo. Cole o código abaixo:

' ' ' ' ' ' ' inicio código

Dim Go As Boolean

Sub StartClock()
Go = True
MyClock
End Sub

Sub MyClock()
If Go Then
ActiveSheet.Calculate
Application.OnTime Now() + TimeValue("00:00:01"), "MyClock"
End If
End Sub

Sub StopClock()
Go = False
End Sub

' ' ' ' ' ' ' ' ' ' fim código

Agora feche a janela do Visual Basic (é opcional: pode deixar aberta e não precisa salvar se fechar) e volte ao Excel. Entre no menu Ferramentas e na opção Macro selecione Macros… (ou tecle o atalho Alt+F8)

Agora basta executar a macro StartClock quando quiser o Excel atualizado a cada segundo ou StopClock para parar a atualização…

Gostou? Tem dúvidas? Entre em contato ou deixe um comentário!

28 thoughts on “Atualização segundo a segundo no Excel

  1. Boa tarde,
    Achei seu site no Google e acho que vc pode me ajudar.
    Estou tentando montar um cronômetro com split e lap, ou seja, quando inicio o cronômetro do 00:00:00,0 e aperto uma tecla, ele tem que marcar os laps (as voltas no caso de uma corrida) e continuar rodando.
    Exemplo, dou início no cronômetro, quando o primeiro corredor chegar eu clico e marco o seu tempo, mas não posso parar o cronômetro, pois tenho que eperar os outros chegarem e marcar também o tempo individual de cada um.
    Exemplo:
    1º chega com 15:00,0
    2º com 15:25,7
    3º com 16:30,0
    etc…
    Mas quando eu clicar no botão lap, ele tem que ir para a célula de baixo e marcar o tempo do 2º, 3º etc… pois colocarei o nome dos atletas na frente.
    Sou professor de Ed.Física e trabalho com atletismo.
    Por favor, vc pode me ajuda com esta macro?
    Um abraço
    Prof. Marcos

    • Bom, não sei se o Excel é a melhor solução, porque a precisão do Excel não é grande coisa, ele até pode atualizar de 1 em 1 segundo, mas não teríamos décimos ou centésimos de segundo na atualização dos tempos… pelo que entendi precisas de um botão que ao ser acionado adicionaria o tempo atual a uma célula (por exemplo, célula B2) e a cada vez que fosse acionado faria o mesmo para as células abaixo (B3, B4 etc.). É isso?

  2. Cara é o seguinte…eu estou fazendo uma trabalho assim:

    Tenho uma planilha A que serve de controle de compras para mim
    E a planilha B que serve para que eu saiba quando essas compras serão atendidas
    a planilha A é atualizada diariamente e eu não consigo me dedicar a duplicar algumas informações na planilha B. Queria de uma certa forma, puxar os dados dessa planilha A para a B sem que ter que digitar tudo denovo. Como eu faço? A idéia é que a outra planilha nem esteja aberta quando eu fizer a cópia.

    abs!

    • Basta informar corretamente o endereço da informação externa. Por exemplo, num arquivo chamado exemplo.xls que estiver na mesma pasta da planilha atual, se quero pegar o que está na célula A2 da planilha Plan3 daquele arquivo, use a fórmula:

      =[exemplo.xls]Plan3!A2

      No caso de um arquivo externo que está em outra pasta do computador, tem que fornecer o caminho completo do arquivo, por exemplo, valor da célula A2 na planilha Plan1 da pasta de trabalho exemplo.xls, escreva:

      =’c:meus documentos[exemplo.xls]Plan1′!A2

      (as aspas simples servem para evitar o problema de caminhos que contém espaços em seu nome)

  3. Como faço para colocar o botão de redefinir,salvar.imprimir e atualizar no excel em uma tabela de classificação

  4. Estou fazendo umas tabela de classificação dos jogos alagoanos a tabela de rodadas e de classificação de fases preciso da sua ajuda pra que quando eu alterar o numero de gol por rodadas automaticamente altere na tabela de classificação de fases me ajuda por favor :D

  5. Ola,estou precisando da sua ajuda se possivel.
    Bom… é o seguinte.Eu quero importar os dados desse link http://it.finance.yahoo.com/q?s=EURUSD=X (somente a parte de valores),para o excel e estou tentando fazer a atualizacao a cada segundo da mudanca desses valores automaticamente,sem ter que ficar apertando nenhum botao,mas sim o excel atualizar a cada segundo,de acordo com o que os valores vao mudando no site,mudariam tb automaticamente na planilha do excel.
    Voce poderia me ajudar?Ficarei muito feliz.
    Obrigada.
    Monique

    • Bom… Vamos lá:
      1) Para importar os dados, use a opção “Importar Dados Externos” (no Menu Dados) e
      2) depois selecione “Nova Consulta à Web”. Vai abrir um mini-navegador,
      3) digite o endereço desejado (http://it.finance.yahoo.com/q?s=EURUSD=X); no mini-navegador, as “setinhas amarelas” representam os dados que podem ser importados para a sua planilha,
      4) escolha os dados (setinhas amarelas) desejados e clique no botão “importar”, depois,
      5) decida se quer importar para a planilha atualmente aberta ou para uma nova planilha e ANTES de dar OK,
      6) clique na opção “propriedades” e selecione a opção “Atualizar a cada” e escreva 1 (minutos) e dê OK.

      Isso fará que sua planilha seja atualizada a cada minuto (o que deve ser suficiente, pois atualizações muito frequentes via web podem deixar o Excel extremamente lento)…
      Caso o passo 6 não tenha sido feito, é possível atualizar os dados manualmente, bastaria ir no menu Dados e selecionar a opção “Atualizar Dados” (com os dados selecionados na planilha) ou com o botão da direita do mouse, mas acredito que não seja exatamente isso o que você precisa, não é? Pesquisei um pouco e é possível atualizar com intervalos menores do que 1 minuto e a minha dica de “atualização segundo a segundo” irá funcionar caso acrescente na macro MyClock a seguinte linha:

      Range(“B1:B10”).QueryTable.Refresh BackgroundQuery:=False

      (onde B1:B10 é o intervalo onde estão os dados externos a serem atualizados)
      Mas atenção, como expliquei antes, a atualização segundo a segundo vão deixar a planilha extremamente lenta (porque a atualização em si pode levar mais de um segundo), você pode trocar o argumento da função TimeValue (em MyClock) para atualizar a cada 10 segundosTimeValue(“00:00:10”) ou um valor ainda maior (15 ou 20 segundos) ao invés de a cada segundo, parece mais realista…

      Links úteis:
      http://visualdicas.blogspot.com/2009/09/como-importar-e-atualizar-dados-da-web.html
      http://www.linhadecodigo.com.br/artigo/448/Obtendo-dados-atualizados-da-Web-atrav%C3%A9s-do-Excel-XP.aspx

  6. Obrigada pela ajuda mas… eu segui seus passos e nao deu certo, na hora de atualizar no caso depois de 1 minuto,embaixo aparece o incone que esta atualizando mas nao acontece nada,os dados nao mudam.
    Voce poderia fazer pra mim e mandar por email,por favor.Obrigada novamente.

    • Bom, para mim funcionou direitinho, mas notei que em certos horários a página deles não é atualizada, já testou em outros horários ou verificou se os dados da página estavam diferentes dos dados exibidos no Excel?

  7. Ola, veja se pode me ajudar…
    Tenho duas planilhas (plan1 e plan2). as duas tem a mesma tabela dinamica (TD_1), com layouts diferentes. Elas devem ficar protegidas. Preciso de uma macro que desprotege, atualiza e protege novamente. O problema é que quando está atualizando a primeira planilha, a macro pela rotina protege a segunda planilha sem que acabe a atualização da primeira, aí quando vai atualizar a segunda planilha dá erro dizendo que a segunda planilha esta protegida. Preciso de um comando que proteja após concluir a atualização! Obrigado

    • Consultei um colega especialista em macros em Excel e ele disse que isso de proteger e desproteger por macro dá tanta dor de cabeça que ele acha melhor nem tentar… Vou ficar devendo, também não sei como fazer!

  8. Show de bola cara! Vou viver aqui no seu site! hahaha
    Parabéns!! Abraço!

  9. Olá, eu gostaria da sua ajuda, eu estou fazendo uma planilha para uma imobiliária, e eles gostariam que avisassem quando estivesse perto de vencer, conta vencida e já paga… Isso eu ja consegui, mas gostaria que quando chegasse a da atualizassem automaticamente, que saisse de perto de vencer que esta em amarelo, para Conta vencida que esta em vermelho… gostaria da sua ajuda para isso. Pq eu tentei colocar essa formula =AGORA(), Mas ja tem formulas para aparecer isso, e não sei aonde coloca esse formula agora, mas o macro eu ja coloquei. Me ajude, por favor

    • Não respondi antes porque a) estava de férias e b) achei muito complicado… Acho que, se entendi a pergunta, teria de fazer uma macro para mover todos os dados “vencidos” de uma coluna para outra…. Se for isso, ia ficar meio difícil de fazer sem ter a planilha original pra testes…

  10. Professor, estou com um duvida.

    Tem um aplicativo que desenvolvi em C# para coletar os dados de uma planilha constantemente 1 em 1 segundo. Esta planilha fica aberta atualizando cotações e ofertas de acoes todo o tempo. Entretanto quando vou copiar ele só copia dados antigos, e não consigo atualizar, pelo C# já que é ReadOnly.
    Imagino que para resolver o problema é necessáario fazer uma MACRO que salve a planilha em 1 em 1 segundo. Assim quando pegar o dado estará atualizado

    Como fazer isto ? Estou perdido

    Obrigado

    • Modifique a macro Sub MyClock() para:

      Sub MyClock()
      If Go Then
      ActiveSheet.Calculate
      Application.OnTime Now() + TimeValue("00:00:05"), "MyClock"
      ActiveWorkbook.Save
      End If
      End Sub

      Isso salvará o arquivo a cada 5 segundos (seguno a segundo poderia ficar muito “pesado” para o Excel, dependendo do tamanho das planilhas, mas experimente com outros valores)

  11. Tem como acrescentar horas no tempo automático do escell??
    Exemplo: Coloco uma macro com atualização automática do tempo em uma célula, ou seja, o tempo muda de segundo em segundo, porém, preciso de dois tempos, o atual em uma célula e outro, três horas a frente, em outra célula. É possível??

    • Sim, é possível acrescentar horas na função agora, basta dividir por 24 a hora a ser somada, por exemplo, se quero mais 3 horas, uso a fórmula =AGORA()+3/24

  12. Ola Bom dia.
    Sou novo no seu blog
    quiria fala gostei muito.

    minha duvida onde eu coloco o comando no vba para ele executar uma useform automaticamente (useform.show)
    agora quando ela for executada quero que ela oculte todas as planilha do excel (application.visibe = false)
    mas onde eu coloco essa sub no wooksheet ou no useform ou na guia de aba????

  13. Bom dia!
    Encontrei seu site pelo google também e achei de muita valia o seu conteúdo.
    Estou com uma questão que é o seguinte:
    tenho duas planilhas onde a segunda tem os dados importados da primeira.
    Gostaria de criar uma macro onde essa atualização aconteceça a cada segundo já que o excel só possibilita atualizar no minimo a cada um minuto.
    Desde já agradeço a boa vontade.

  14. Ola amigao,

    Estou tentado criar uma planilha de exibação de graficos,

    Exemplo:

    Na planilha 1 fica um grafico1
    Na planilha 2 fica um grafico2

    Teria como criar um conômetro regressivo de 15 seg após zera aparecer um link ou botão para seguir para a próxima planilha com outro gráfico?

  15. Cara gostei muito dessa macro, porem eu queria saber como eu poço colocar ela para ficar automática, quanto abrir a planilha a hora já ficava atualizando automaticamente sem precisar ativar.

    Me ajude,
    Obrigado

  16. Aqui da erro depois do now() fala que era esperado fim da instrução

  17. Olá, eu tenho uma dúvida.
    No meu trabalho quero fazer uma apresentação com uma planilha que importa uma coluna de TMA *(Tempo Médio de Atendimento) a cada 1 minuto.
    E a planilha de qual vou importar eu gostaria que a coluna TMA somasse +1 de um em um minuto como eu faço?

Comments are closed.