ms-access access-vba ms-access-2010 statusbar

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í.