VBA Calculate - Now, Workbook, Worksheet, or Range

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.

wave wave wave wave wave