Ši pamoka išmokys jus visų skirtingų VBA skaičiavimo parinkčių.
Pagal numatytuosius nustatymus „Excel“ apskaičiuoja visas atidarytas darbaknyges kiekvieną kartą, kai keičiama darbaknygė. Tai daroma sekant skaičiavimo medį, kuriame pakeitus langelį A1, atnaujinamos visos ląstelės, kurios priklauso nuo langelio A1 ir pan. Tačiau dėl to jūsų VBA kodas gali būti paleistas nepaprastai lėtai, kaip ir kiekvieną kartą keičiant langelį, „Excel“ turi iš naujo apskaičiuoti.
Norėdami padidinti savo VBA greitį, procedūrų pradžioje dažnai norėsite išjungti automatinius skaičiavimus:
1 | Application.Calculation = xlManual |
ir vėl įjunkite pabaigoje:
1 | Taikymas. Skaičiavimas = xlAutomatinis |
Tačiau ką daryti, jei pagal procedūrą norite apskaičiuoti visas (ar dalį) savo darbaknygių? Likusi šios pamokos dalis išmokys jus, ką daryti.
Apskaičiuokite dabar
Galite naudoti komandą Apskaičiuoti, kad viską perskaičiuotumėte (visose atidarytose darbaknygėse):
1 | Apskaičiuoti |
Paprastai tai yra geriausias būdas naudoti. Tačiau taip pat galite atlikti siauresnius skaičiavimus, kad padidintumėte greitį.
Apskaičiuokite tik lapą
Taip pat galite nurodyti VBA apskaičiuoti tik konkretų lapą.
Šis kodas perskaičiuos aktyvų lapą:
1 | ActiveSheet.Skaičiuoti |
Šis kodas perskaičiuos „Sheet1“:
1 | Lakštai („Sheet1“). Apskaičiuokite |
Apskaičiuoti diapazoną
Jei jums reikia siauresnio skaičiavimo, galite nurodyti VBA apskaičiuoti tik langelių diapazoną:
1 | Skaičiuoklės („Sheet1“). Diapazonas („a1: a10“). Apskaičiuokite |
Apskaičiuokite individualią formulę
Šis kodas apskaičiuos tik atskirą langelio formulę:
1 | Diapazonas ("a1"). Apskaičiuokite |
Skaičiuoti darbo knygą
Nėra VBA parinkties apskaičiuoti tik visą darbo knygą. Jei reikia apskaičiuoti visą darbaknygę, geriausia naudoti komandą Apskaičiuoti:
1 | Apskaičiuoti |
Tai apskaičiuos visas atidarytas darbo knygas. Jei tikrai nerimaujate dėl greičio ir norite apskaičiuoti visą darbaknygę, galbūt galėsite būti atrankingesni, kurios darbo knygos vienu metu atidaromos.
Apskaičiuokite darbo knygą - metodai, kurie neveikia
Yra keli būdai, kuriais galite susigundyti, kad priverstumėte VBA apskaičiuoti tik darbaknygę, tačiau nė vienas iš jų neveiks tinkamai.
Šis kodas perkelia kiekvieną darbaknygės darbalapį ir po vieną perskaičiuoja lapus:
1234567 | Iš naujo apskaičiuoti_darbo knygą ()Dim ws kaip darbalapisUž kiekvieną ws darbalapiuosews. ApskaičiuokiteKitas wsPabaiga Sub |
Šis kodas veiks gerai, jei visi jūsų darbalapiai yra „savarankiški“, tai reiškia, kad nė viename jūsų lape nėra skaičiavimų, nurodančių kitus lapus.
Tačiau, jei jūsų darbalapiai nurodyti kituose lapuose, jūsų skaičiavimai gali būti netinkamai atnaujinti. Pvz., Jei apskaičiuosite „Sheet1“ prieš „Sheet2“, bet „Sheet1“ formulės bus pagrįstos „Sheet2“ skaičiavimais, tada jūsų formulėse nebus naujausių verčių.
Taip pat galite pabandyti pasirinkti visus lapus vienu metu ir apskaičiuoti aktyvųjį lapą:
12 | ThisWorkbook.Sheets.SelectActiveSheet.Skaičiuoti |
Tačiau tai sukels tą pačią problemą.