Pausa de un segundo
Tmp=timer+1
while Tmp > Timer
DoEvents
wend
----------- Sacado de Microsoft ----------------------------------------------------------
La función DoEvents surrenders ejecución de la macro para que el sistema operativo pueda procesar otros eventos. La función DoEvents pasa el control de la aplicación en el sistema operativo. Algunos casos en que puede resultar útil DoEvents incluyen:
- E/s de hardware
- Bucles de retraso
- Llamadas de sistema operativo
- Interbloqueo de DDE
En este artículo también se describe los posibles problemas asociados con la función DoEvents.
==> E/s de hardware
Si el código espera una entrada desde cualquier dispositivo de E/s, la función DoEvents acelera la aplicación por multitarea. Como resultado, el equipo no parece pausar o dejar de responder (se bloquea) mientras se ejecuta el código.
Ejemplo:
Open "com1" For Input As #1
Input #1, x
Do Until x = Chr(13)
DoEvents
'...
'...
Input #1, x
Loop
==> Bucles de retraso
En un bucle de retardo, la función DoEvents puede permitir al sistema de operativo de CPU continuar con los trabajos pendientes.
Ejemplo:
X = Timer()
Do While X + 10 > Timer()
DoEvents
Loop
==> Llamadas de sistema operativo
Cuando Visual Basic llama el sistema operativo, el sistema operativo puede devolver el control incluso antes de procesar completamente el comando. Si lo hace, puede impedir que cualquier código de macro que depende de un objeto generado por la llamada de ejecución. En el ejemplo siguiente, la función Shell inicia la aplicación Microsoft Word. Si Word no está todavía abierto, cualquier esfuerzo de establecer un vínculo DDE con el detendrá el código. Mediante el uso de DoEvents, el procedimiento asegura que una operación, como la shell, se ejecuta completamente antes de procesa la siguiente instrucción de macro.
Ejemplo:
z% = Shell("WinWord Source.Doc",1)
DoEvents
...
...
==> Interbloqueo de DDE
Considere una situación en que una macro de Visual Basic llama a una aplicación que está esperando una segunda aplicación obtener algunos datos. Si la macro no le otorga control la segunda aplicación, el resultado es un interbloqueo. En las conversaciones DDE entre varias aplicaciones, utilice DoEvents quita la posibilidad de este tipo de interbloqueos.
==> Problemas asociados a DoEvents
Con demasiadas instrucciones DoEvents anidadas, se puede agotar el espacio de pila y, por lo tanto, generar un mensaje de error "Out of Stack Space". Este error se refiere al espacio de pila de la aplicación asignado a la aplicación Microsoft Excel.
Asegúrese de que el procedimiento que ha proporcionado el control de DoEvents no se ejecuta nuevo de una parte diferente del código antes de la primera llamada a DoEvents devuelve; Esto puede provocar resultados imprevisibles.
Una vez DoEvents renuncia control al sistema operativo, no es posible determinar cuando Microsoft Excel se reanudará el control. Después de que el sistema operativo Obtiene el control del procesador, procesará todos los eventos pendientes que están actualmente en la cola de mensajes (como clics del mouse (ratón) y pulsaciones de teclas). Esto puede ser inadecuado para algunas aplicaciones de adquisición de datos en tiempo real.