Sto utilizzando DoEvents
per forzare un aggiornamento di un indicatore di stato nella barra di stato (o in alcune celle del foglio) come nel codice di esempio riportato di seguito. Ma lo schermo non si aggiorna, o smette di rinfrescare ad un certo punto. L'attività alla fine viene completata, ma la barra di avanzamento è inutile.DoEvents non fa gli eventi ... Perché?
Perché lo DoEvents
non esegue gli eventi? Cos'altro posso fare per forzare un aggiornamento dello schermo?
Modifica: sto utilizzando Excel 2003 su Windows XP.
Questo è un seguito di uno earlier question; grazie a Robert Mearns per la sua risposta e il codice di esempio qui sotto.
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
Hai provato senza 'Application.ScreenUpdating = FALSE? –
Curioso ... funziona correttamente (aggiungendo un ciclo interno per un po 'di tempo) sulla mia macchina ... –
Per favore pubblica le versioni di Excel e OS –