Za każdym razem, gdy aktualizujesz wartość komórki, program Excel przechodzi przez proces ponownego obliczenia skoroszytu. Podczas pracy bezpośrednio w programie Excel chcesz, aby tak się działo przez 99,9% czasu (wyjątkiem jest praca z bardzo dużym skoroszytem). Może to jednak naprawdę spowolnić kod VBA. Dobrą praktyką jest ustawianie obliczeń na ręczne na początku makr i przywracanie obliczeń na końcu makr. Jeśli chcesz ponownie obliczyć skoroszyt, możesz ręcznie polecić programowi Excel obliczenie.
Wyłącz obliczenia automatyczne
Możesz wyłączyć automatyczne obliczanie za pomocą makra, ustawiając je na xlmanual. Użyj następującego fragmentu kodu VBA:
1 | Aplikacja.Obliczenia = xlPodręcznik |
Włącz ponownie obliczenia automatyczne
Aby ponownie włączyć automatyczne obliczanie za pomocą ustawienia xlAutomatic:
1 | Aplikacja.Calculation = xlAutomatic |
Zalecam wyłączenie obliczeń automatycznych na samym początku procedury i ponowne włączenie obliczeń automatycznych na końcu. Będzie to wyglądać tak:
Przykład makra wyłączania automatycznych obliczeń
12345678 | Sub Auto_Calcs_Example()Aplikacja.Obliczenia = xlPodręcznik'Zrób cośAplikacja.Calculation = xlAutomaticNapis końcowy |
Obliczenia ręczne
Gdy obliczenia automatyczne są wyłączone, możesz użyć Oblicz polecenie, aby zmusić program Excel do ponownego obliczenia:
1 | Oblicz |
Możesz także powiedzieć programowi Excel, aby ponownie obliczył tylko pojedynczy arkusz:
1 | Arkusze ("arkusz1").Oblicz |
Możesz również powiedzieć VBA, aby ponownie obliczył tylko zakres (kliknij, aby przeczytać nasz artykuł o metodach obliczania VBA)
Oto jak to może wyglądać w makrze:
12345678910111213 | Sub Auto_Calcs_Example_Manual_Calc()Aplikacja.Obliczenia = xlPodręcznik'Zrób coś„Przelicz”Oblicz„Rób więcej rzeczy”Aplikacja.Calculation = xlAutomaticNapis końcowy |
Ustawienia VBA - kod przyspieszenia
Jeśli Twoim celem jest przyspieszenie kodu, powinieneś również rozważyć dostosowanie tych innych ustawień:
Wyłączenie aktualizacji ekranu może mieć ogromną różnicę w szybkości:
1 | Application.ScreenUpdating = Fałsz |
Wyłączenie paska stanu również zrobi małą różnicę:
1 | Application.DisplayStatusBar = False |
Jeśli twój skoroszyt zawiera zdarzenia, powinieneś również wyłączyć zdarzenia na początku procedur (aby przyspieszyć kod i zapobiec niekończącym się pętlom!):
1 | Application.EnableEvents = False |
Wreszcie kod VBA może zostać spowolniony, gdy program Excel spróbuje ponownie obliczyć podziały stron (uwaga: nie będzie to miało wpływu na wszystkie procedury). Aby wyłączyć DisplayPageBreaks, użyj tego wiersza kodu:
1 | ActiveSheet.DisplayPageBreaks = Fałsz |