Estoy usando DoEvents
para forzar una actualización de un indicador de progreso en la barra de estado (o en alguna celda de la hoja) como en el siguiente código de ejemplo. Pero la pantalla no se actualiza o deja de refrescarse en algún momento. La tarea finalmente se completa, pero la barra de progreso es inútil.DoEvents no hace los eventos ... ¿Por qué?
Por qué no DoEvents
"hará los eventos"? ¿Qué más puedo hacer para forzar una actualización de pantalla?
Editar: Estoy usando Excel 2003 en Windows XP.
Esta es una continuación de un earlier question; Gracias a Robert Mearns por su respuesta y el código de muestra a continuación.
Sub ProgressMeter()
Dim booStatusBarState As Boolean
Dim iMax As Integer
Dim i As Integer
iMax = 100
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
¿Ha intentado sin 'Application.ScreenUpdating = false'? –
Curioso ... funciona bien (agregando un bucle interno para tomarse un tiempo) en mi máquina ... –
Publique las versiones de Excel y SO –