| Termin | Definicja |
|---|---|
| Application.DisplayAlerts | Application.DisplayAlerts to właściwość obiektowa w makrach VBA kontrolująca wyświetlanie standardowych komunikatów ostrzegawczych aplikacji. Application.DisplayAlerts w makrach VBA i automatyzacji ExcelaApplication.DisplayAlerts jest właściwością obiektu Application w języku VBA, czyli mechanizmem pozwalającym sterować tym, czy aplikacja Microsoft Excel ma pokazywać standardowe okna ostrzegawcze podczas wykonywania makra. Takie komunikaty pojawiają się między innymi przy zapisywaniu pliku w określonym formacie, zamykaniu skoroszytu z niezapisanymi zmianami, usuwaniu arkusza, zastępowaniu istniejącego pliku albo wykonywaniu operacji, która może spowodować utratę danych. W zwykłej pracy ręcznej ostrzeżenie pomaga podjąć świadomą decyzję. W automatyzacji może jednak zatrzymać procedurę i oczekiwać na reakcję użytkownika. Wartość True oznacza standardowe zachowanie, a więc wyświetlanie komunikatów zgodnie z ustawieniami aplikacji. Wartość False tymczasowo wyłącza większość ostrzeżeń generowanych przez Excel. Dzięki temu makro może wykonać zaplanowaną serię czynności bez zatrzymywania się na każdym pytaniu. Nie jest to jednak globalne zabezpieczenie przed wszystkimi możliwymi komunikatami i nie zastępuje prawidłowego projektowania procedury. Właściwość odnosi się do instancji aplikacji, w której działa kod, dlatego należy brać pod uwagę, czy makro pracuje w bieżącym Excelu, czy steruje inną instancją uruchomioną przez automatyzację. Application.DisplayAlerts a decyzje podejmowane przez programNajprostszy schemat użycia polega na wyłączeniu komunikatów przed operacją, wykonaniu określonej czynności i przywróceniu poprzedniego stanu. Przykładowo procedura może wyglądać następująco:
Istotne jest zapamiętanie wcześniejszej wartości, ponieważ kod nie powinien zakładać, że przed jego uruchomieniem właściwość zawsze miała wartość True. Przywrócenie stanu po zakończeniu operacji ogranicza skutki uboczne i pozwala zachować przewidywalne działanie innych makr oraz ręcznych czynności. W wielu przypadkach wystarczy ustawić DisplayAlerts na False, wykonać jedną instrukcję, a następnie natychmiast przywrócić True. Dłuższe pozostawienie wyłączonych ostrzeżeń utrudnia wykrywanie problemów. Ważne jest także rozróżnienie między wyłączeniem komunikatu a wyborem odpowiedzi. Excel może w trybie bez ostrzeżeń zastosować odpowiedź domyślną, która nie zawsze odpowiada oczekiwaniom. Przy zapisie w innym formacie może zostać zaakceptowana utrata elementów niedostępnych w tym formacie. Przy zamykaniu skoroszytu może zostać pominięta możliwość ręcznego zapisania zmian. Dlatego przed użyciem właściwości należy sprawdzić, jaką decyzję normalnie sugeruje dany komunikat i jakie konsekwencje ma jej automatyczne zaakceptowanie. Application.DisplayAlerts w porównaniu z obsługą błędów i kontrolą plikówDisplayAlerts nie jest odpowiednikiem instrukcji On Error. Pierwsza właściwość wpływa na standardowe ostrzeżenia aplikacji, natomiast On Error określa sposób reagowania na błędy wykonania kodu. Jeżeli plik nie istnieje, ścieżka jest niedostępna, skoroszyt jest zablokowany albo wystąpi problem z uprawnieniami, samo wyłączenie komunikatów nie rozwiązuje przyczyny. Potrzebna jest osobna obsługa błędów, kontrola warunków początkowych i jednoznaczne zakończenie procedury. Nie należy też traktować DisplayAlerts jako zamiennika sprawdzania, czy plik już istnieje. Bezpieczniejszy przebieg obejmuje ustalenie ścieżki, sprawdzenie obecności pliku, potwierdzenie, że plik docelowy nie jest otwarty, oraz świadome określenie, czy ma zostać zastąpiony. W razie potrzeby można wyświetlić własny komunikat za pomocą MsgBox, zapisać informację w dzienniku albo przerwać procedurę. Własny komunikat przekazuje więcej kontekstu niż ogólne ostrzeżenie Excela i pozwala wskazać nazwę pliku, etap pracy oraz możliwe dalsze działania. W procedurach operujących na wielu skoroszytach warto unikać konstrukcji, w której DisplayAlerts zostaje wyłączone na początku i pozostaje w tym stanie aż do końca długiego procesu. Gdy makro przerwie się przed planowanym zakończeniem, użytkownik może nie zauważyć ostrzeżeń podczas późniejszej pracy. Z tego powodu przydatny jest blok porządkujący, który przywraca właściwość także po błędzie. Trzeba również uważać na zagnieżdżone procedury, ponieważ jedna procedura może zmienić ustawienie, którego oczekuje inna. Application.DisplayAlerts przy typowych problemach z makramiJednym z częstych problemów jest nadpisanie istniejącego pliku bez wystarczającej kontroli. Gdy ostrzeżenia są wyłączone, procedura może przejść dalej mimo tego, że nazwa docelowa już istnieje. Jeżeli taki efekt jest zamierzony, powinien zostać opisany w logice makra, a nie wynikać wyłącznie z ukrycia komunikatu. Jeżeli nadpisanie jest niedopuszczalne, należy zastosować inną nazwę, utworzyć kopię lub zatrzymać operację przed zapisem. Inny przypadek dotyczy usuwania arkuszy. Excel zwykle ostrzega przed usunięciem arkusza, ponieważ operacja może być trudna do odwrócenia. Ustawienie DisplayAlerts na False pozwala wykonać usunięcie bez pytania, dlatego przed taką czynnością warto sprawdzić nazwę arkusza, liczbę pozostałych arkuszy, zależności formuł oraz obecność danych. W kodzie można też ograniczyć zakres działania do konkretnego obiektu zamiast opierać się na ActiveSheet, którego wskazanie może ulec zmianie. Problemy pojawiają się również przy zamykaniu skoroszytów. Jeżeli DisplayAlerts jest wyłączone, Excel może nie zapytać o zapis zmodyfikowanych danych. Przed zamknięciem należy więc jawnie zdecydować, czy skoroszyt ma zostać zapisany, zamknięty bez zapisu, czy pozostawiony otwarty. Instrukcje Save, Close oraz SaveAs powinny być stosowane w sposób jednoznaczny, z użyciem właściwego obiektu Workbook, a nie przypadkowo aktywnego okna. Jeżeli makro kończy się błędem i po jego wykonaniu znikają ostrzeżenia w całej aplikacji, pierwszym krokiem może być ręczne ustawienie Application.DisplayAlerts = True w oknie Immediate albo ponowne uruchomienie Excela. W środowisku produkcyjnym lepiej usunąć przyczynę i dodać procedurę sprzątającą, aby przywracanie ustawień następowało automatycznie. Application.DisplayAlerts w praktycznym zgłoszeniu do serwisuPrzed zgłoszeniem problemu z makrem warto zanotować nazwę skoroszytu, etap, na którym procedura się zatrzymuje, treść komunikatu oraz informację, czy problem występuje przy otwieraniu, zapisie, zamykaniu, kopiowaniu lub usuwaniu danych. Pomocne jest także wskazanie wersji Excela, sposobu uruchamiania makra i tego, czy plik działa poprawnie po włączeniu ostrzeżeń. Tak przygotowany opis ułatwia odtworzenie sytuacji bez przypadkowego modyfikowania danych. Weryfikacji wymaga nie tylko pojedyncza linia ustawiająca Application.DisplayAlerts, lecz także cały przebieg procedury: obsługa błędów, przywracanie ustawień, ścieżki plików, nazwy arkuszy, zależności między skoroszytami oraz sposób zamykania obiektów. W razie potrzeby analizę makra i problemów z działaniem komputera można zgłosić do firmy Warszawskie Pogotowie Komputerowe 24/7. Przed przekazaniem pliku należy usunąć poufne dane albo przygotować kopię testową, aby diagnostyka nie zmieniała oryginalnego materiału. Najbezpieczniejsza zasada jest prosta: DisplayAlerts powinno być wyłączane tylko na czas konkretnej, przewidywalnej operacji, a następnie przywracane niezależnie od tego, czy procedura zakończyła się powodzeniem, czy błędem. Takie podejście ogranicza ryzyko cichego nadpisania pliku, usunięcia arkusza bez kontroli i utraty informacji, a jednocześnie pozwala korzystać z automatyzacji tam, gdzie ręczne potwierdzanie każdego kroku nie jest potrzebne. |