Eu tenho uma planilha do Excel com a macro a seguir. Eu gostaria de fazer um loop a cada segundo, mas não consigo encontrar a função para fazer isso. Não é possível?
Sub Macro1()
'
' Macro1 Macro
'
Do
Calculate
'Here I want to wait for one second
Loop
End Sub
DoEvents
demonstração aqui. Dailydoseofexcel.com/archives/2005/06/14/stopwatchApplication.Wait(Now + #0:00:01#)
Saúde!Application.Wait (Now + TimeValue("0:00:01"))
Application.wait(now + 1e-5)
por um segundo,Application.wait(now + 0.5e-5)
por meio segundo etc.Adicione isso ao seu módulo
Ou, para sistemas de 64 bits, use:
Chame-o em sua macro assim:
fonte
Sleep()
permite especificar tempos de espera de menos de 1 segundo.Application.Wait
às vezes é muito granular.Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
ao invés de usar:
eu prefiro:
porque é muito mais fácil de ler depois.
fonte
isso funciona perfeitamente para mim. insira qualquer código antes ou depois do loop "do until". No seu caso, coloque as 5 linhas (time1 = & time2 = & "fazer até" loop) no final dentro do seu loop do
fonte
Timer
porque aTimer
abordagem falha pouco antes da meia-noite.A declaração de Suspensão em kernel32.dll não funciona no Excel de 64 bits. Isso seria um pouco mais geral:
fonte
Apenas uma versão limpa do código de clemo - funciona no Access, que não tem a função Application.Wait.
fonte
Timer
fornecer o número de segundos desde a meia-noite, essa abordagem falhará se for executada um pouco antes da meia-noite (ou seja,sngEnd
se> = 86.400). À meia-noite,Timer
zera para 0 e permanece menos quesngEnd
para sempre.A maioria das soluções apresentadas utiliza Application.Wait, que não leva em consideração o tempo (milissegundos) já decorrido desde o início da contagem do segundo atual, portanto , possuem uma imprecisão intrínseca de até 1 segundo .
A abordagem do temporizador é a melhor solução , mas você deve levar em conta a redefinição à meia-noite, então aqui está um método muito preciso de dormir usando o temporizador:
USE ISSO PARA TESTAR QUALQUER FUNÇÃO DE SLEEP: (abrir janela imediata de depuração: CTRL + G)
fonte
Application.Wait Second(Now) + 1
fonte
fonte
Aqui está uma alternativa para dormir:
No código a seguir, faço um efeito de "brilho" piscar em um botão giratório para direcionar os usuários a ele se estiverem "tendo problemas". Usar "sleep 1000" no loop resultou em nenhum piscar visível, mas o loop está funcionando muito bem.
fonte
Eu fiz isso para responder ao problema:
fonte
Eu geralmente uso a função Timer para pausar o aplicativo. Insira este código no seu
fonte
Timer
fornecer o número de segundos desde a meia-noite, essa abordagem falhará se for executada um pouco antes da meia-noite (ou seja, seT0
for menor que o número de segundos de atraso a partir da meia-noite). À meia-noite,Timer
redefine para 0 antes que o limite de atraso seja atingido.Delay
nunca atinge o limite de atraso, então o loop é executado para sempre.Loop Until Delay >= 1
, ou corre o risco de passar de 1 e nunca sair do loop.As funções de espera e suspensão bloqueiam o Excel e você não pode fazer mais nada até que o atraso termine. Por outro lado, os atrasos de loop não fornecem um tempo exato de espera.
Então, fiz esta solução alternativa unindo um pouco de ambos os conceitos. Ele faz um loop até a hora que você deseja.
Você só precisa ligar para Waste10Sec onde você precisa do atraso
fonte
Experimente isto:
fonte
Você pode usar Application.wait now + timevalue ("00:00:01") ou Application.wait now + timeserial (0,0,1)
fonte