Tento tutoriál vás naučí všetky rôzne možnosti výpočtu vo VBA.
V predvolenom nastavení Excel vypočíta všetky otvorené zošity pri každej zmene zošita. Vykonáva to tak, že postupuje podľa stromu výpočtov, kde ak sa zmení bunka A1, aktualizuje všetky bunky, ktoré sa spoliehajú na bunku A1 atď. To však môže spôsobiť spustenie vášho kódu VBA extrémne pomaly, pretože pri každej zmene bunky sa musí Excel prepočítať.
Na zvýšenie rýchlosti VBA budete často chcieť zakázať automatické výpočty na začiatku vašich postupov:
1 | Application.Calculation = xlManual |
a znova ho povoľte na konci:
1 | Application.Calculation = xlAutomatic |
Čo však v prípade, že chcete v rámci svojho postupu vypočítať všetky (alebo časť) zošitov? Zvyšok tohto tutoriálu vás naučí, čo máte robiť.
Vypočítajte teraz
Na prepočítanie všetkého (vo všetkých otvorených zošitoch) môžete použiť príkaz Vypočítať:
1 | Vypočítajte |
Toto je zvyčajne najlepšia metóda. Na zvýšenie rýchlosti však môžete vykonávať aj užšie výpočty.
Vypočítať iba hárok
Môžete tiež povedať VBA, aby počítala iba konkrétny list.
Tento kód prepočíta aktívny list:
1 | ActiveSheet.Calculate |
Tento kód prepočíta List1:
1 | Tabuľky („List1“). Vypočítajte |
Vypočítajte rozsah
Ak požadujete užší výpočet, môžete VBA povedať, aby vypočítal iba rozsah buniek:
1 | Tabuľky („List1“). Rozsah („a1: a10“). Vypočítajte |
Vypočítajte individuálny vzorec
Tento kód vypočíta iba vzorec individuálnej bunky:
1 | Rozsah („a1“). Vypočítajte |
Vypočítajte zošit
Neexistuje žiadna možnosť VBA na výpočet iba celého zošita. Ak potrebujete vypočítať celý zošit, najlepšou možnosťou je použiť príkaz Vypočítať:
1 | Vypočítajte |
Tým sa vypočítajú všetky otvorené zošity. Ak vám záleží na rýchlosti a chcete vypočítať celý zošit, môžete byť selektívnejší v otázke, ktoré zošity sú otvorené naraz.
Vypočítajte zošit - metódy, ktoré nefungujú
Existuje niekoľko spôsobov, ktorými by ste mohli byť pokúšaní prinútiť VBA vypočítať iba zošit, ale žiadna z nich nebude fungovať správne.
Tento kód bude prechádzať každým pracovným listom v zošite a prepočíta listy jeden po druhom:
1234567 | Sub Recalculate_Workbook ()Dim ws As worksheetZa každé ws v pracovných listochws.VypočítajteĎalšie wsKoniec pod |
Tento kód bude fungovať, ak sú všetky vaše pracovné hárky „samostatné“, čo znamená, že žiadny z vašich hárkov neobsahuje výpočty, ktoré sa vzťahujú na iné hárky.
Ak sa však vaše pracovné listy odkazujú na iné listy, vaše výpočty sa nemusia aktualizovať správne. Ak napríklad počítate hárok 1 pred hárok 2, ale vzorce hárka 1 sa spoliehajú na výpočty vykonané v hárku 2, potom vaše vzorce nebudú obsahovať najaktuálnejšie hodnoty.
Môžete tiež skúsiť vybrať všetky hárky naraz a vypočítať aktívny list:
12 | ThisWorkbook.Sheets.SelectActiveSheet.Calculate |
To však spôsobí rovnaký problém.