Celowe wywołanie błędu w kodzie makra pozwala nam świadomie sterować naszą aplikacją. Instrukcja On Error Resume Next ignoruje błędy, ale dzięki niej możemy w kodzie przejść dalej i sprawdzić czy wystąpił błąd. Instrukcja Err.Raise pozwala nam z kolei zgłosić własny błąd i dzięki temu przerwać działanie programu.
Korzyści błędu
Na pierwszy rzut oka temat może się wydawać nieco absurdalny. Bugi są przecież czymś niepożądanym i chcemy ich uniknąć w swoim kodzie. Po co więc tworzyć sztuczny błąd?
W praktyce okazuje się, że celowe wywołanie błędu może nam dostarczyć cennych informacji. I to w szybki i łatwy sposób.
Czy arkusz istnieje?
Przykładem może być sprawdzenie, czy arkusz z konkretną nazwą znajduje się w skoroszycie. Niektórzy w tym celu napiszą kod bazujący na pętli, który sprawdzi nazwę zakładki i porówna ją z tą szukaną.
Zaawansowani programiści napiszą kod, w którym spróbują przypisać szukanemu arkuszowi zmienną obiektową. Taką operację trzeba rzecz jasna poprzedzić instrukcją, która ignoruje błędy. Jeżeli arkusz faktycznie istnieje – błąd nie wystąpi. Jeżeli arkusza nie ma – błąd wystąpi, ale zostanie zignorowany.
Metoda Raise obiektu Err
Obiekt Err poza popularnymi właściwościami: Number i Description posiada także bardzo interesującą metodę Raise. Jej składnia jest następująca: Err.Raise (Liczba, Źródło, Opis, PlikPomocy, IndeksPomocy).
Argumenty Err.Raise są więc takie same jak właściwości obiektu Err. Wszystkie z wyjątkiem pierwszego są opcjonalne.
Pewnym ograniczeniem jest fakt, że dla własnego błędu nie możemy zgłosić numeru, który jest już wykorzystany przez wbudowany błąd. VBA dostarcza własną stałą vbObjectError, która na szczęście pomaga w tworzeniu własnych numerów błędów.
Kiedy stosować Err.Raise?
Instrukcja Err.Raise pozwala nam zgłosić własny błąd i dzięki temu przerwać działanie programu. Celowe wywołanie błędu jest bowiem równoznaczne z przejściem interpretera do etykiety obsługi błędów.
Makro traktuje zgłoszony błąd tak samo jak błąd programowy. Naszym zdaniem jest więc przypisanie temu błędowi własnego numeru i opisu.
Film na Vlogu
W poniższym filmie korzystam z instrukcji Err.Raise, aby poinformować użytkownika, że nie wybrał w okienku zdjęcia. W takiej sytuacji nie możemy załadować zdjęcia, więc musimy przerwać makro.
Podobnie postąpiłem w przypadku popularnych miniaturek. Nie mam możliwości wgrania ich do arkusza, jeżeli użytkownik nie wskaże wcześniej katalogu, w którym się znajdują.