Výpočet VBA - teraz, zošit, pracovný hárok alebo rozsah

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.

Vám pomôže rozvoju miesta, zdieľať stránku s priateľmi

wave wave wave wave wave