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
DoEvents
demostració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.Wait
a 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
Timer
porque elTimer
enfoque 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
Timer
da el número de segundos desde la medianoche, entonces este enfoque falla si se ejecuta justo antes de la medianoche (es decir,sngEnd
es> = 86,400). A medianoche, seTimer
restablece a 0 y, por lo tanto, permanece menos desngEnd
siempre.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) + 1
fuente
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
Timer
da el número de segundos desde la medianoche, entonces este enfoque falla si se ejecuta justo antes de la medianoche (es decir, queT0
es menor que el número de segundos de retraso desde la medianoche). A medianoche, seTimer
restablece a 0 antes de que se alcance el límite de retraso.Delay
nunca 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