Tento tutoriál vás naučí všechny různé možnosti výpočtu ve VBA.
Ve výchozím nastavení Excel vypočítá všechny otevřené sešity pokaždé, když je provedena změna sešitu. Toho se dosáhne sledováním stromu výpočtu, kde pokud se změní buňka A1, aktualizuje všechny buňky, které se spoléhají na buňku A1 atd. To však může způsobit spuštění kódu VBA extrémně pomalu, protože při každé změně buňky se musí Excel přepočítat.
Chcete -li zvýšit rychlost VBA, budete často chtít deaktivovat automatické výpočty na začátku vašich postupů:
1 | Application.Calculation = xlManual |
a znovu jej povolte na konci:
1 | Application.Calculation = xlAutomatic |
Co když však chcete v rámci svého postupu vypočítat všechny (nebo část) svých sešitů? Zbytek tohoto tutoriálu vás naučí, co dělat.
Vypočítejte hned
Pomocí příkazu Vypočítat můžete přepočítat vše (ve všech otevřených sešitech):
1 | Vypočítat |
Toto je obvykle nejlepší metoda. Můžete však také provádět užší výpočty pro lepší rychlost.
Vypočítat pouze list
Můžete také VBA sdělit, aby počítala pouze konkrétní list.
Tento kód přepočítá aktivní list:
1 | ActiveSheet.Calculate |
Tento kód přepočítá list1:
1 | Tabulky („List1“). Vypočítejte |
Vypočítat rozsah
Pokud požadujete užší výpočet, můžete VBA říci, aby vypočítal pouze rozsah buněk:
1 | Listy („List1“). Rozsah („a1: a10“). Vypočítejte |
Vypočítejte individuální vzorec
Tento kód vypočítá pouze vzorec jednotlivé buňky:
1 | Rozsah ("a1"). Vypočítejte |
Vypočítat sešit
Neexistuje žádná možnost VBA pro výpočet pouze celého sešitu. Pokud potřebujete vypočítat celý sešit, je nejlepší použít příkaz Vypočítat:
1 | Vypočítat |
Tím se vypočítají všechny otevřené sešity. Pokud vám opravdu záleží na rychlosti a chcete vypočítat celý sešit, můžete být více vybíraví ohledně toho, které sešity jsou otevřené najednou.
Spočítat sešit - metody, které nefungují
Existuje několik metod, které byste mohli být v pokušení použít k vynucení VBA vypočítat pouze sešit, ale žádná z nich nebude fungovat správně.
Tento kód bude procházet každým listem v sešitu a přepočítá listy jeden po druhém:
1234567 | Sub Recalculate_Workbook ()Dim ws As WorksheetZa každé ws v pracovních listechws. VypočítejteDalší wsEnd Sub |
Tento kód bude fungovat dobře, pokud jsou všechny vaše listy „samostatné“, což znamená, že žádný z vašich listů neobsahuje výpočty, které odkazují na jiné listy.
Pokud však vaše listy odkazují na jiné listy, vaše výpočty se nemusí aktualizovat správně. Pokud například počítáte list1 před listem2, ale vzorce listu1 se spoléhají na výpočty provedené v listu2, pak vaše vzorce nebudou obsahovat nejaktuálnější hodnoty.
Můžete také zkusit vybrat všechny listy najednou a vypočítat aktivní list:
12 | ThisWorkbook.Sheets.SelectActiveSheet.Calculate |
To však způsobí stejný problém.