Ori de câte ori actualizați valoarea unei celule, Excel trece printr-un proces de recalculare a registrului de lucru. Când lucrați direct în Excel, doriți ca acest lucru să se întâmple 99,9% din timp (excepția fiind dacă lucrați cu un registru de lucru extrem de mare). Cu toate acestea, acest lucru poate încetini cu adevărat codul VBA. Este o practică bună să setați calculele la manual la începutul macrocomenzilor și să restaurați calculele la sfârșitul macrocomenzilor. Dacă trebuie să recalculați registrul de lucru, puteți spune manual Excel să calculeze.
Dezactivați calculele automate
Puteți dezactiva calculul automat cu o macro setând-o la xlmanual. Utilizați următoarea bucată de cod VBA:
1 | Application.Calculation = xlManual |
Porniți din nou calculele automate
Pentru a porni înapoi calculul automat cu setarea xlAutomatic:
1 | Aplicație.Calcul = xlAutomatic |
Vă recomandăm să dezactivați calculele automate chiar la începutul procedurii și să reactivați calculele automate la final. Va arăta astfel:
Dezactivați Exemplu de macro pentru calcule automate
12345678 | Sub Auto_Calcs_Example ()Application.Calculation = xlManual'Fă cevaAplicație.Calcul = xlAutomaticSfârșitul Sub |
Calcul manual
Când calculele automate sunt dezactivate, puteți utiliza calculati comandă pentru a forța Excel să recalculeze:
1 | calculati |
De asemenea, puteți spune Excel să recalculeze doar o foaie de lucru individuală:
1 | Fișe de lucru („foaia1”). Calculați |
De asemenea, puteți spune VBA să recalculeze doar un interval (faceți clic pentru a citi articolul nostru despre metodele de calcul VBA)
Iată cum ar putea arăta acest lucru în interiorul unei macrocomenzi:
12345678910111213 | Sub Auto_Calcs_Example_Manual_Calc ()Application.Calculation = xlManual'Fă ceva- Recalccalculati„Fă mai multe lucruriAplicație.Calcul = xlAutomaticSfârșitul Sub |
Setări VBA - Cod de accelerare
Dacă obiectivul dvs. este să vă accelerați codul, ar trebui să luați în considerare și ajustarea acestor alte setări:
Dezactivarea actualizării ecranului poate face o mare diferență de viteză:
1 | Application.ScreenUpdating = Fals |
Dezactivarea barei de stare va face, de asemenea, o mică diferență:
1 | Application.DisplayStatusBar = Fals |
Dacă registrul de lucru conține evenimente, ar trebui să dezactivați evenimentele la începutul procedurilor (pentru a accelera codul și pentru a preveni buclele nesfârșite!):
1 | Application.EnableEvents = Fals |
În sfârșit, codul VBA poate fi încetinit atunci când Excel încearcă să recalculeze pauzele de pagină (Notă: nu toate procedurile vor fi afectate). Pentru a dezactiva DisplayPageBreaks utilizați această linie de cod:
1 | ActiveSheet.DisplayPageBreaks = Fals |