Start > Kursy on-line > Excel - makra i VBA

Excel - makra i VBA


Obsługa błędów i komunikaty

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ę.