Excel ti consente di controllare quando effettuare il ricalcolo di un foglio di lavoro. Normalmente, Excel ricalcola ogni volta che modifichi qualcosa in una cella. Se lavori con fogli di lavoro molto grandi che contengono molte formule, potresti voler disattivare la funzione di ricalcolo automatico. È possibile disattivare il ricalcolo automatico utilizzando gli strumenti nel gruppo Calcolo nella scheda Formule della barra multifunzione, aprendo la tendina Opzioni di calcolo.
Le tue macro possono anche forzare Excel a ricalcolare il foglio di lavoro. Se hai attivato il ricalcolo automatico, qualsiasi modifica apportata dalla macro in un foglio di lavoro imporrà il ricalcolo di Excel. Se hai disattivato il ricalcolo automatico, puoi utilizzare il metodo Calculate per ricalcolare un foglio di lavoro:
ActiveSheet.Calculate
Naturalmente, se l’esecuzione del ricalcolo richiede un po’ di tempo, è possibile verificare se è necessario un ricalcolo prima di forzarne effettivamente uno. Sembra che non ci sia alcun flag che puoi controllare direttamente per vedere se è necessario un ricalcolo. La cosa più vicina è quella di controllare la proprietà Saved dell’oggetto Workbook. Questa proprietà funge essenzialmente da “dirty flag” per l’intera cartella di lavoro. Se in una cartella di lavoro sono presenti modifiche non salvate, la proprietà Saved sarà False; se tutto è salvato, allora sarà True.
In che modo questo ti aiuta a capire se è necessario un ricalcolo? Ricorda che il calcolo è necessario solo quando ci sono modifiche in un foglio di lavoro. La modifica di qualsiasi elemento in un foglio di lavoro imposterà anche la proprietà Saved della cartella di lavoro su False. Pertanto, potresti controllare la proprietà Saved prima di eseguire il ricalcolo, come mostrato qui:
If Not ActiveWorkbook.Saved Then
ActiveSheet.Calculate
End If
Naturalmente c’è solo un problema con questo approccio: la proprietà Saved è impostata su True solo se la cartella di lavoro viene effettivamente salvata. Ciò significa che potresti ricalcolare più volte senza che sia realmente necessario farlo, a meno che non colleghi insieme il salvataggio e il ricalcolo, come mostrato qui:
If Not ActiveWorkbook.Saved Then
ActiveSheet.Calculate
ActiveWorkbook.Save
End If
La saggezza di affrontare questo problema in questo modo dipende dalla natura della tua situazione particolare. Se il salvataggio della cartella di lavoro richiede più tempo rispetto al semplice ricalcolo, questo approccio non funzionerà. Se, tuttavia, il ricalcolo richiede più tempo (cosa molto possibile con alcuni tipi di operazioni), questo approccio potrebbe funzionare bene.
Chiaramente ci sono molte azioni in Excel che imposteranno il “dirty flag” su True, come ad esempio modificare la formattazione di una cella o modificare i margini nelle impostazioni di stampa… L’esecuzione delle macro qui presentate causeranno il ricalcolo della cartella di lavoro nonostante non sia cambiato nulla che renda necessario un ricalcolo. D’altro canto, è difficile immaginare un caso in cui potrebbe essere necessario un ricalcolo e la proprietà Saved sia ancora True. Quindi, se non altro, il suggerimento esposto in questo articolo è un approccio sicuro al problema.