Quando Dave scrive una macro che deve elaborare molte informazioni in un ciclo For …​ Next, utilizza sempre la barra di stato per indicare l’avanzamento.

In genere, verrà visualizzato un messaggio come “Elaborazione riga X di Y”. Quando “Y” è un valore elevato (l’estremità superiore del ciclo For …​ Next), Excel spesso interrompe l’aggiornamento della barra di stato e visualizza qualcosa come “Non risponde” nella barra del titolo di Excel. La macro è ancora in esecuzione, tuttavia, e al termine, Excel inizia a rispondere e tutto funziona come dovrebbe. Dave si chiede come può impedire a Excel di comportarsi in questo modo e, invece, visualizzare gli aggiornamenti della barra di stato come vuole.

Questo comportamento sembra verificarsi quando a Windows sembra che Excel ha smesso di rispondere. (Dopotutto è Windows che è responsabile di ciò che appare nella barra del titolo di un programma.) Sono stato in grado di riprodurre il comportamento abbastanza facilmente se ho più programmi aperti in Windows e faccio clic su un’altra finestra del programma mentre Excel è in blocco una lunga macro. In sostanza, se Excel è impegnato a eseguire la macro o non riesce a tenere il passo nel chiedere a Windows di aggiornare la barra di stato, allora lo fa, anzi sembra che Excel abbia smesso di rispondere.

Ci sono due possibili approcci che possono essere utilizzati. Innanzitutto, puoi utilizzare il comando DoEvents all’interno del ciclo. Normalmente viene utilizzato per istruire la macro a prestare attenzione a tutto ciò che si trova nella coda degli eventi, come quando qualcuno preme la tastiera. Equivale a forzare Excel a “cercare” dalla macro su cui sta lavorando e a comunicare con Windows. Ciò, necessariamente, consentirebbe a Windows di sapere che Excel è davvero reattivo e consentirebbe gli aggiornamenti alla barra di stato.

Potresti anche inserire il comando subito dopo aver aggiornato la barra di stato:

Application.StatusBar = "Processing row " & X & " of " & Y DoEvents

L’altra cosa da provare è semplicemente non aggiornare così tanto la barra di stato.

Se l’estremità superiore del ciclo è molto grande, potrebbe essere meglio calcolare una percentuale e aggiornare la barra di stato quando una parte del totale è stata completata, forse ogni 5% o 10% del totale. Ciò significherebbe che la barra di stato deve essere aggiornata solo 10 o 20 volte durante il ciclo, anziché centinaia o migliaia di volte. Ciò potrebbe significare che Windows può tenere il passo con le richieste di aggiornamento della barra di stato e, come bonus, la tua macro potrebbe essere eseguita più velocemente perché non deve aggiornare la barra di stato così spesso.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (13341) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.