Fredric ha scritto di un problema che stava avendo con una macro. Quando esegue la macro nell’editor VB utilizzando F8 (passando attraverso la macro), si completa in pochi minuti. Quando esegue la macro a titolo definitivo, sembra che ci voglia un’eternità per l’esecuzione, spesso impiegando 20 minuti o più per l’esecuzione. Anche se la cartella di lavoro di Fredric è grande (46 MB), la differenza di tempo tra i due metodi di esecuzione è fastidiosa.

Problemi come questo possono essere sconcertanti e spesso richiedono analisi pesanti per capirlo. Un buon punto di partenza è aggiungere un po ‘di “codice timer” nella macro. Aggiungi una piccola routine che salva un valore temporale e un’altra routine che confronta il valore salvato con l’ora corrente e visualizza la differenza. All’inizio di una sezione di codice che vuoi analizzare, chiami la prima routine (che salva l’ora di inizio)

e poi alla fine della sezione di codice chiamate la seconda routine.

In questo modo, puoi determinare quali parti del tuo codice impiegano più tempo per essere eseguite. Queste sono le sezioni di codice su cui ti concentri, quindi puoi capire cosa stanno facendo che sta impiegando così tanto tempo.

Un’altra cosa è assicurarti di aggiungere queste due righe all’inizio della tua macro:

Application.ScreenUpdating = False Application.EnableEvents = False

Questi disattivano l’aggiornamento dello schermo, che può rallentare una macro in esecuzione e disabilitare gli eventi. Quest’ultima riga è inclusa in modo che le modifiche apportate dalla macro nel foglio di lavoro non attivino le routine di ricalcolo di Excel. Se la tua macro sta apportando molte modifiche ai dati nel foglio di lavoro e viene attivato un ricalcolo completo dopo ogni modifica, con una cartella di lavoro così grande, è possibile dedicare molto tempo solo al ricalcolo. Alla fine della tua macro, inverti l’effetto delle due linee che hai aggiunto:

Application.EnableEvents = True Application.ScreenUpdating = True

Potresti anche voler disattivare il calcolo automatico mentre la macro è in esecuzione. In questo modo ci si assicura che Excel non tenti di calcolare i risultati intermedi mentre la macro sposta le cose o lavora in altro modo con i dati. Per disattivare il calcolo automatico, usa questa riga all’inizio della tua macro:

Application.Calculation = xlCalculationManual

È una buona idea disattivare il calcolo automatico in una macro solo se la macro non si basa sulle informazioni calcolate nel foglio di lavoro. Se lo disattivi, puoi in seguito riattivare il calcolo automatico posizionando la seguente riga vicino alla fine della tua macro:

Application.Calculation = xlCalculationAutomatic

Un lettore ha suggerito di concentrarsi su un’altra applicazione mentre la macro è in esecuzione nel foglio di lavoro di Excel. Ad esempio, apri Blocco note e rendi attiva quella finestra. La macro dovrebbe accelerare notevolmente quando Excel non è più attivo. Un’altra opzione da provare è spostare il puntatore del mouse verso il basso nell’area della barra delle applicazioni invece di averlo sul foglio di lavoro Excel attivo.

_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 (818) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per l’interfaccia del menu precedente di Excel qui: