Załącznik z przykładami dla tego rozdziału znajduje się w tym miejscu.
Przedostatni rozdział w tej części kursu będzie miał za zadanie przybliżyć czytelnikowi podstawowe elementy obsługi błędów i sytuacji nieprzewidywalnych.
Niemal zawsze zdarza się, że w bardziej skomplikowanych aplikacjach trudno przewidzieć wszystko to, co późniejszym użytkownikom naszego programu "przyjdzie na myśl" z nim zrobić. Takie sytuacje są praktycznie nie do wyeliminowania, ale możemy spróbować zabezpieczyć nasz program przed ich skutkami lub spowodować skłonić użytkownika do określonych czynności - pytając go o pewne rzeczy lub informując go.
Najpierw o obsłudze błędów. Aby program potrafił poradzić sobie z każdym nieprzewidzianym zdarzeniem, powinniśmy użyć polecenia "On Error"" i dalej jego opcji:
- On Error GoTo - i podać etykietę wiersza (opcjonalnie może być to też numer linii). Etykieta wiersza jest tekstem, który musi zaczynać się od pierwszej kolumny kodu i zaraz po nim następuje dwukropek, a dopiero po nim właściwy kod programu
- On Error GoTo 0 - wyłącza zupełnie obsługę błędów w ramach danej procedury/funkcji
- On Error Resume Next - w razie błędu przejdź do kolejnego polecenia.
Spójrzmy może na przykład i jego konsekwencje:
Sub bledy_w_typach()
Dim licznik As Integer
On Error Resume Next
licznik = "abc"
End Sub
Zastosowanie procedury obsługi błędu nie spowoduje pojawienia się komunikatu o błędzie nawet w przypadku próby zapisania do zmiennej o typie "Integer" (czyli liczba całkowita) danych tekstowych.Kolejny przykład wykorzystuje etykietę linii w procedurze:
Sub bledy_w_typach2()
Dim licznik As Integer
On Error GoTo jesli_blad
licznik = "abc"
jesli_blad: MsgBox "UWAGA!!!", vbOKOnly, "Zły typ danych"
End Sub
Etykietą jest "jesli_blad" - linia ta jest umieszczona poniżej i powoduje wyświetlenie stosownego komunikatu, co nie powoduje jednak przerwania działania procedury. Dzięki temu, gdyby po komunikacie były umieszczone kolejne polecenia, zostałyby one wykonane - a wcześniej zapisane zmienne nadal przechowywałyby wartości.W tym miejscu celowo "wywołaliśmy do tablicy" komunikaty. Mogą one zarówno informować jak i powodować np. przerwanie programu. Poleceniem, które wyświetla komunikat jest MsgBox. Jego użycie jest widoczne powyżej, jednak trzeba zatrzymać się chwilę nad jego opcjami i tym jakie one mają konsekwencje.
W powyższym przykładzie po MsgBox podaliśmy komunikat "Uwaga!!!", a następnie rodzaj (typ) przycisku - vbOKOnly, po czym nagłówek okna komunikatu ("Zły typ danych"). Środkowa część deklaracji jest kluczowa: vbOKOnly jest typowym przyciskiem potwierdzającym - zobaczmy co się stanie jeśli po tym poleceniu wstawimy do procedury kolejne:
Sub bledy_w_typach2()
Dim licznik As Integer
On Error GoTo jesli_blad
licznik = "abc"
jesli_blad: MsgBox "UWAGA!!!", vbOKOnly, "Zły typ danych"
Cells(1, 1) = "błąd"
End Sub
W tym przypadku, mimo że komunikat został wyświetlony, to jak już wspomniano wcześniej, dalsze polecenia zostały wykonane. Wykorzystajmy jednak MsgBox do pokierowania poczynanami użytkownika. W tym celu użyjemy go w instrukcji warunkowej:
Sub bledy_w_typach3()
Dim licznik As Integer
On Error GoTo jesli_blad
licznik = "abc"
jesli_blad:
If MsgBox("UWAGA!!!", vbOKCancel, "Zły typ danych") = vbOK Then
Cells(1, 1) = "błąd - ale kliknięto OK"
Else
Cells(1, 1) = "błąd - ale kliknięto cancel"
End If
End Sub
Okno dialogowe ma tę cechę, że potrafi zwrócić wartość w zależności od naciśniętych przycisków - dzięki temu, wykorzystując dodatkowo instrukcje warunkowe, możemy sprawić, że dajemy użytkownikowi możliwość zadecydowania o dalszych działaniach. Oczywiście opcji użycia MsgBox jest więcej - odsyłam zatem użytkownika do pomocy programu - należy wpisać w oknie wyszukiwania "MsgBox", aby wyświetlić pełną informację.