VBA — jak przyspieszyć makro w Excelu?

Jak przyspieszyć VBA przez ScreenUpdating, Calculation i EnableEvents oraz bezpiecznie przywrócić ustawienia nawet po błędzie.

Najkrócej:

Największy szybki zysk daje ograniczenie odświeżania ekranu, automatycznych przeliczeń i zdarzeń na czas ciężkiej operacji.

Gotowy kod

Skopiuj makro

VBA
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 Sub
Dostosowanie

Co zmienić w kodzie?

01

Wstaw właściwą operację w oznaczonym miejscu.

02

Jeśli kod korzysta z formuł wymagających aktualnego wyniku, wykonaj Calculate w odpowiednim momencie.

03

Przy bardzo dużych danych największą poprawę zwykle daje ograniczenie odczytów i zapisów komórka po komórce.

Wyjaśnienie

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.

Uważaj na

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.