ms access - Cómo mostrar el progreso en la barra de estado cuando se ejecuta código(no consultas)
ms-access access-vba (1)
Llame a DoEvents
después de cada llamada a SysCmd
. Eso indicará a Windows que actualice la pantalla antes de que su código avance.
En esta función, cada mensaje de la barra de estado es visible antes de que se muestre el siguiente.
Function PutMessageInStatusBar2()
Const lngMilliseconds As Long = 1000
SysCmd acSysCmdSetStatus, "Before loop 1"
DoEvents
Sleep lngMilliseconds
SysCmd acSysCmdSetStatus, "Before loop 2"
DoEvents
Sleep lngMilliseconds
SysCmd acSysCmdSetStatus, "Before loop 3"
DoEvents
Sleep lngMilliseconds
SysCmd acSysCmdSetStatus, "Done."
DoEvents
Sleep lngMilliseconds
SysCmd acSysCmdClearStatus
End Function
Sleep
se basa en un método API de Windows y se declara en la sección Declaraciones de un módulo estándar:
Option Compare Database
Option Explicit
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Ya he publicado una pregunta sobre la actualización de la barra de estado mientras se ejecutan consultas en MS Access 2010. Consulte Cómo mostrar el progreso en la barra de estado al ejecutar una secuencia de consultas en MS Access si está interesado.
Esta es una pregunta muy simple sobre algún código que no funciona. Espero que si alguien puede responderlo, me ayude a comprender por qué el código para la pregunta más complicada no funciona.
Function PutMessageInStatusBar1()
Dim RetVal As Variant
Dim i As Long
RetVal = SysCmd(4, "Before loop 1")
For i = 1 To 500000000
Next
RetVal = SysCmd(4, "Before loop 2")
For i = 1 To 500000000
Next
RetVal = SysCmd(4, "Before loop 3")
For i = 1 To 500000000
Next
RetVal = SysCmd(5)
End Function
Escribí una macro para ejecutar el código. Comienza desactivando las advertencias, luego llama a la función anterior, muestra un cuadro de mensaje para decir "Finalizado" y luego activa las advertencias.
Cuando lo ejecuto, la barra de estado primero muestra "Listo". Hay una pausa, presumiblemente mientras el código ejecuta el Loop 1. Luego muestra "Before loop 2" y finalmente "Before loop 3".
¿Por qué no muestra "Antes del ciclo 1"?
Traté de poner RetVal = syscmd (5) justo al comienzo de la función para ver si hacía alguna diferencia. No fue así.