Tengo una hoja de cálculo de Excel que tiene la siguiente macro. Me gustaría hacer un bucle cada segundo, pero peligroso si puedo encontrar la función para hacer eso. ¿No es posible?
Sub Macro1()
'
' Macro1 Macro
'
Do
Calculate
'Here I want to wait for one second
Loop
End Sub

DoEventsdemostración aquí dailydoseofexcel.com/archives/2005/06/14/stopwatchApplication.Wait(Now + #0:00:01#)¡Salud!Application.Wait (Now + TimeValue("0:00:01"))Application.wait(now + 1e-5)por un segundo,Application.wait(now + 0.5e-5)por medio de un segundo etc.Agrega esto a tu módulo
O, para sistemas de 64 bits, use:
Llámalo en tu macro así:
fuente
Sleep()permite especificar tiempos de espera de menos de 1 segundo.Application.Waita veces es demasiado granular.Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)En lugar de usar:
yo prefiero:
porque es mucho más fácil de leer después.
fuente
esto funciona perfectamente para mí. inserte cualquier código antes o después del ciclo "hacer hasta". En su caso, coloque las 5 líneas (time1 = & time2 = & "do until" loop) al final dentro de su do loop
fuente
Timerporque elTimerenfoque falla justo antes de la medianoche.La declaración de suspensión en kernel32.dll no funcionará en Excel de 64 bits. Esto sería un poco más general:
fuente
Solo una versión limpia del código de clemo: funciona en Access, que no tiene la función Application.Wait.
fuente
Timerda el número de segundos desde la medianoche, entonces este enfoque falla si se ejecuta justo antes de la medianoche (es decir,sngEndes> = 86,400). A medianoche, seTimerrestablece a 0 y, por lo tanto, permanece menos desngEndsiempre.La mayoría de las soluciones presentadas utilizan Application.Wait, que no tiene en cuenta el tiempo (milisegundos) ya transcurrido desde que comenzó la cuenta de segundos actual, por lo que tienen una imprecisión intrínseca de hasta 1 segundo .
El enfoque del temporizador es la mejor solución , pero debe tener en cuenta el reinicio a la medianoche, por lo que aquí hay un método de suspensión muy preciso que usa el temporizador:
UTILICE ESTO PARA PROBAR CUALQUIER FUNCIÓN DE SUEÑO: (abrir la ventana de depuración inmediata: CTRL + G)
fuente
Application.Wait Second(Now) + 1fuente
fuente
Aquí tienes una alternativa para dormir:
En el siguiente código, hago parpadear un efecto "resplandor" en un botón giratorio para dirigir a los usuarios hacia él si "tienen problemas", el uso de "dormir 1000" en el ciclo no dio como resultado un parpadeo visible, pero el ciclo funciona muy bien.
fuente
Hice esto para responder al problema:
fuente
Normalmente uso la función de temporizador para pausar la aplicación. Inserta este código en el tuyo
fuente
Timerda el número de segundos desde la medianoche, entonces este enfoque falla si se ejecuta justo antes de la medianoche (es decir, queT0es menor que el número de segundos de retraso desde la medianoche). A medianoche, seTimerrestablece a 0 antes de que se alcance el límite de retraso.Delaynunca alcanza el límite de retardo, por lo que el ciclo se ejecuta para siempre.Loop Until Delay >= 1, o corre el riesgo de pasar de 1 y nunca salir del bucle.Las funciones de espera y suspensión bloquean Excel y no puede hacer nada más hasta que finalice el retraso. Por otro lado, los retardos de bucle no le dan un tiempo exacto para esperar.
Entonces, hice esta solución uniendo un poco de ambos conceptos. Se repite hasta que llega el momento que desea.
Solo necesita llamar a Waste10Sec donde necesite el retraso
fuente
Prueba esto :
fuente
Puede usar Application.wait now + timevalue ("00:00:01") o Application.wait now + timeserial (0,0,1)
fuente