Kdykoli aktualizujete hodnotu buňky, Excel projde procesem přepočítání sešitu. Při práci přímo v aplikaci Excel chcete, aby se to stalo 99,9% času (výjimka je, pokud pracujete s extrémně velkým sešitem). To však může skutečně zpomalit váš kód VBA. Je dobrým zvykem nastavit výpočty ručně na začátku maker a obnovit výpočty na konci maker. Pokud potřebujete sešit přepočítat, můžete ručně sdělit Excelu, aby vypočítal.
Vypněte automatické výpočty
Automatický výpočet můžete vypnout pomocí makra nastavením na xlmanual. Použijte následující část kódu VBA:
1 | Application.Calculation = xlManual |
Zapněte znovu automatické výpočty
Chcete -li znovu zapnout automatický výpočet s nastavením xlAutomatic:
1 | Application.Calculation = xlAutomatic |
Doporučuji deaktivovat automatické výpočty na samém začátku postupu a automatické výpočty znovu povolit na konci. Bude to vypadat takto:
Zakázat příklad automatického výpočtu makro
12345678 | Dílčí automatický_kalkuly_Příklad ()Application.Calculation = xlManual'Dělej něcoApplication.Calculation = xlAutomaticEnd Sub |
Ruční výpočet
Když jsou automatické výpočty deaktivovány, můžete použít Vypočítat příkaz k vynucení přepočtu Excelu:
1 | Vypočítat |
Můžete také říct Excelu, aby přepočítal pouze jednotlivý list:
1 | Pracovní listy („sheet1“). Vypočítejte |
Můžete také říct VBA, aby přepočítala pouze rozsah (kliknutím si přečtěte náš článek o metodách výpočtu VBA)
Takto to může vypadat uvnitř makra:
12345678910111213 | Dílčí automatické_kalky_Příklad_Manuální_kalkulace ()Application.Calculation = xlManual'Dělej něco"Přepočítat."Vypočítat„Dělejte více věcíApplication.Calculation = xlAutomaticEnd Sub |
Nastavení VBA - Zrychlete kód
Pokud je vaším cílem zrychlit kód, měli byste také zvážit úpravu těchto dalších nastavení:
Deaktivace Screenupdating může znamenat obrovský rozdíl v rychlosti:
1 | Application.ScreenUpdating = False |
Vypnutí stavového řádku bude mít také malý rozdíl:
1 | Application.DisplayStatusBar = False |
Pokud váš sešit obsahuje události, měli byste také zakázat události na začátku vašich procedur (pro zrychlení kódu a zabránění nekonečným smyčkám!):
1 | Application.EnableEvents = False |
Nakonec se váš kód VBA může zpomalit, když se Excel pokusí znovu vypočítat konce stránek (Poznámka: nebudou ovlivněny všechny postupy). Chcete -li vypnout DisplayPageBreaks, použijte tento řádek kódu:
1 | ActiveSheet.DisplayPageBreaks = False |