VBA — jak przyspieszyć makro w Excelu?
Jak przyspieszyć VBA przez ScreenUpdating, Calculation i EnableEvents oraz bezpiecznie przywrócić ustawienia nawet po błędzie.
Największy szybki zysk daje ograniczenie odświeżania ekranu, automatycznych przeliczeń i zdarzeń na czas ciężkiej operacji.
Skopiuj makro
Sub SzybkieMakro()
Dim oldCalc As XlCalculation
oldCalc = Application.Calculation
On Error GoTo CleanUp
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
' --- tutaj właściwy kod ---
ThisWorkbook.Worksheets("Dane").Range("A1").Value = "Gotowe"
CleanUp:
Application.Calculation = oldCalc
Application.EnableEvents = True
Application.ScreenUpdating = True
If Err.Number <> 0 Then
MsgBox "Błąd " & Err.Number & ": " & Err.Description
End If
End SubCo zmienić w kodzie?
Wstaw właściwą operację w oznaczonym miejscu.
Jeśli kod korzysta z formuł wymagających aktualnego wyniku, wykonaj Calculate w odpowiednim momencie.
Przy bardzo dużych danych największą poprawę zwykle daje ograniczenie odczytów i zapisów komórka po komórce.
Jak działa ten kod?
ScreenUpdating=False wyłącza odświeżanie ekranu podczas działania makra.
EnableEvents=False zapobiega uruchamianiu zdarzeń, np. Worksheet_Change, przez zmiany wykonywane przez kod.
Calculation=xlCalculationManual zatrzymuje automatyczne przeliczanie po każdej zmianie.
Sekcja CleanUp przywraca ustawienia również wtedy, gdy w głównym kodzie wystąpi błąd.
Najczęstsze błędy
Nigdy nie kończ makra bez przywrócenia Application.EnableEvents i ScreenUpdating.
Wyłączanie Calculation nie pomoże, jeśli głównym problemem jest milion operacji na pojedynczych komórkach.
Select, Activate i częste przełączanie arkuszy zwykle spowalniają kod i utrudniają jego utrzymanie.