No olvides que en las ciencias un error casi siempre tiene diversas soluciones, de igual modo nosotros mostramos lo más óptimo y eficiente.
Solución:
Agrega un hacer eventos función dentro del bucle, ver más abajo.
También es posible que desee asegurarse de que la barra de estado esté visible para el usuario y restablecerla cuando se complete su código.
Sub ProgressMeter()
Dim booStatusBarState As Boolean
Dim iMax As Integer
Dim i As Integer
iMax = 10000
Application.ScreenUpdating = False
''//Turn off screen updating
booStatusBarState = Application.DisplayStatusBar
''//Get the statusbar display setting
Application.DisplayStatusBar = True
''//Make sure that the statusbar is visible
For i = 1 To iMax ''// imax is usually 30 or so
fractionDone = CDbl(i) / CDbl(iMax)
Application.StatusBar = Format(fractionDone, "0%") & " done..."
''// or, alternatively:
''// statusRange.value = Format(fractionDone, "0%") & " done..."
''// Some code.......
DoEvents
''//Yield Control
Next i
Application.DisplayStatusBar = booStatusBarState
''//Reset Status bar display setting
Application.StatusBar = False
''//Return control of the Status bar to Excel
Application.ScreenUpdating = True
''//Turn on screen updating
End Sub
Los cuadros de texto en las hojas de trabajo a veces no se actualizan cuando se cambia su texto o formato, e incluso el comando DoEvent no ayuda.
Como no hay un comando en Excel para actualizar una hoja de trabajo de la misma forma que se puede actualizar un formulario de usuario, es necesario usar un truco para obligar a Excel a actualizar la pantalla.
Los siguientes comandos parecen hacer el truco:
- ActiveSheet.Calculate
- ActiveWindow.SmallScroll
- Application.WindowState = Application.WindowState
Haz una llamada a DoEvents
en el lazo.
Esto afectará el rendimiento, por lo que es posible que desee llamarlo solo en cada, digamos, décima iteración.
Sin embargo, si solo tiene 30, eso no es un problema.
Acuérdate de que tienes la opción de agregar una reseña si descubriste tu inconveniente a tiempo.