Bezpieczne wyłączenie odświeżania ekranu

Większość programistów VBA wie o tym, że aby przyspieszyć wykonanie procedury warto wyłączyć odświeżanie ekranu. Ma to kluczowe znaczenie np. przy generowaniu złożonych wykresów.
[cc lang=”vb”] Application.ScreenUpdating = False [/cc]
Ale już nie każdy potrafi napisać kod gwarantujący przywrócenie odświeżania. Brak odświeżania może drogo kosztować…
Należy to zrobić w sekcji czyszczenia obsługi błędów, wtedy wykona się zawsze, nawet po błędzie.

Sub GenerujWykres()
   'jakieś deklaracje
   On Error GoTo Obsluga
   Application.ScreenUpdating = False
   'jakiś kod
Czyszczenie:
   On Error Resume Next
   'jakieś inne sprzątanie
   Application.ScreenUpdating = True
   Exit Sub
Obsluga:
   MsgBox Err.Description
   Resume Czyszczenie
End Sub

Oczywiście w ten sposób powinniśmy obsłużyć wszystkie inne niebezpieczne zmiany dokonane przez aplikację na maszynie użytkownika. Na szczęście obsługi błędów nie trzeba pisać w podprocedurach, wystarczy ją napisać w procedurze głównej

Jak bezpiecznie wyłączyć komunikaty ostrzegawcze w Excelu

Z wyłączeniem komunikatów ostrzegawczych nie ma problemu. Jest to właściwość logiczna Excela. Problemem jest fakt, że pozostawienie wyłączonych komunikatów ostrzegawczych jest bardzo niebezpieczne przy późniejszej normalnej pracy użytkownika. Poniżej przykład procedury, gdzie na pewno zawsze nastąpi przywrócenie komunikatów, nawet gdy wystąpi błąd w procedurze. Jest to możliwe przy użyciu poprawnej obsługi błędów.

Private Sub UsunBiezacyArkuszBezOstrzezenia()
 
    On Error GoTo Obsluga
 
    'wyłącz komunikaty ostrzegawcze
    Application.DisplayAlerts = False 
 
    ActiveSheet.Delete
 
Czyszczenie:
    On Error Resume Next
    Application.DisplayAlerts = True 'przywróć komunikaty
    Exit Sub
 
Obsluga:
    MsgBox Err & ". " & Err.Description
    Resume Czyszczenie
 
End Sub