Calcul VBA - Acum, registru de lucru, foaie de lucru sau interval

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ă.

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave