Acest tutorial vă va învăța toate diferitele opțiuni de calcul în VBA.
În mod implicit, Excel calculează toate registrele de lucru deschise de fiecare dată când se face o modificare a registrului de lucru. Face acest lucru urmând un arbore de calcul în care, dacă celula A1 este modificată, actualizează toate celulele care se bazează pe celula A1 și așa mai departe. Cu toate acestea, acest lucru poate cauza executarea codului VBA extrem de încet, ca de fiecare dată când se schimbă o celulă, Excel trebuie să recalculeze.
Pentru a crește viteza VBA, veți dori adesea să dezactivați calculele automate la începutul procedurilor:
1 | Application.Calculation = xlManual |
și reactivați-l la final:
1 | Aplicație.Calcul = xlAutomatic |
Totuși, ce se întâmplă dacă doriți să calculați toate (sau o parte) din registrele dvs. de lucru în cadrul procedurii dvs.? Restul acestui tutorial vă va învăța ce să faceți.
Calculați acum
Puteți utiliza comanda Calculate pentru a recalcula totul (în toate registrele de lucru deschise):
1 | calculati |
Aceasta este de obicei cea mai bună metodă de utilizat. Cu toate acestea, puteți efectua și calcule mai restrânse pentru o viteză îmbunătățită.
Calculați numai foaia
De asemenea, puteți spune VBA să calculeze doar o anumită foaie.
Acest cod va recalcula foaia activă:
1 | ActiveSheet.Calculate |
Acest cod va recalcula Sheet1:
1 | Foi („Foaie1”). Calculați |
Calculați intervalul
Dacă aveți nevoie de un calcul mai restrâns, puteți spune VBA să calculeze doar o gamă de celule:
1 | Foi ("Sheet1"). Range ("a1: a10"). Calculați |
Calculați Formula individuală
Acest cod va calcula doar o formulă de celulă individuală:
1 | Gama ("a1"). Calculați |
Calculați registrul de lucru
Nu există nicio opțiune VBA pentru a calcula doar un întreg registru de lucru. Dacă trebuie să calculați un întreg registru de lucru, cea mai bună opțiune este să utilizați comanda Calculate:
1 | calculati |
Aceasta va calcula toate registrele de lucru deschise. Dacă sunteți cu adevărat îngrijorat de viteză și doriți să calculați un întreg registru de lucru, este posibil să fiți mai selectivi cu privire la ce cărți de lucru sunt deschise simultan.
Calculați registrul de lucru - metode care nu funcționează
Există câteva metode pe care ați putea fi tentat să le folosiți pentru a forța VBA să calculeze doar un registru de lucru, însă niciuna dintre ele nu va funcționa corect.
Acest cod va parcurge fiecare foaie de lucru din registrul de lucru și va recalcula foile pe rând:
1234567 | Sub Recalculate_Workbook ()Dim ws Ca foaie de lucruPentru fiecare ws din foi de lucruws.CalculeazăUrmătorul wsSfârșitul Sub |
Acest cod va funcționa bine dacă toate foile de lucru sunt „autonome”, adică niciuna dintre foile dvs. nu conține calcule care se referă la alte foi.
Cu toate acestea, dacă foile dvs. de lucru se referă la alte foi, este posibil ca calculele dvs. să nu se actualizeze corect. De exemplu, dacă calculați Sheet1 înainte de Sheet2, dar formulele Sheet1 se bazează pe calculele făcute în Sheet2, atunci formulele dvs. nu vor conține cele mai actualizate valori.
De asemenea, puteți încerca să selectați toate foile simultan și să calculați foaia activă:
12 | ThisWorkbook.Sheets.SelectActiveSheet.Calculate |
Cu toate acestea, acest lucru va cauza aceeași problemă.