Exit Sub czy End Sub? Co za różnica? - BI | Dariusz Skórniewski

Exit Sub czy End Sub? Co za różnica?

End Sub w środku procedury?

Każda procedura VBA musi zawierać początek i koniec. Słowo Sub z nazwą makra jest na początku, a koniec wyznacza linijka End Sub. Zanim przejdziemy do Exit Sub zobacz jak wygląda prawidłowa konstrukcja procedury.

Instrukcja zakończenia procedury może pojawić się również w środku kodu, jednak edytor VBA nie pozwoli na dwukrotne użycie polecenia End Sub.

Exit Sub przybywa na ratunek

W sytuacji pojawienia się drugiego polecenia End Sub edytor VBA wyświetli błąd. Dla edytora wszystko co jest po End Sub powinno być komentarzem, albo początkiem nowej procedury. W tym wypadku drugie End Sub nie może istnieć bez początku nowej procedury.

Jest jednak możliwość przerwania całej procedury jeśli zamiast słowa End zastosujemy Exit.

Exit Sub pozwala przerwać makro

Oczywiście przerwanie procedury powinno mieć jakieś logiczne uzasadnienie, dlatego polecenie Exit Sub często poprzedzone jest instrukcją warunkową If.

Przykład procedury z zastosowaniem Exit Sub

Stworzyłem prosty przykład z kolumną zawierającą wartości liczbowe od 10 do -5.

W ramach pętli For Next procedura sprawdzać będzie wartości kolejnych komórek. Pętla For Next wykorzystuje w działaniu zmienną liczbową, dlatego zadeklarowałem zmienną k, która przyjmować będzie kolejne wartości przy przechodzeniu pętli.

W takiej formie pętla rozpocznie swoje działanie od wiersza drugiego, a zakończy dochodząc do końca zakresu danych. Zapis [a1].End(xlDown).Row pozwala na uzyskanie informacji jaki jest ostatni numer wiersza, który zawiera jakieś dane. To tylko jedna z metod na wyznaczanie końca zakresu.

Pora na dodanie warunku, który spowoduje przerwanie pętli. Wykorzystując metodę Cells, w której odwołam się do zmiennej k jako numeru wiersza sprawdzę, czy wartość komórki jest mniejsza od 0. Jeśli warunek się spełni spełniony to polecenie przerwie procedurę. Mogę dodać jeszcze komunikat, który poinformuje mnie o tym fakcie. Ważne jest to, aby komunikat znalazł się przed poleceniem Exit Sub. Jeśli umieszczę komunikat po Exit Sub to nie zostanie on nigdy wyświetlony.

komunikat musi być przed Exit Sub jeśli ma się wyświetlić

Jeśli przetestujesz to makro dla takich samych danych jak moje to za każdym razem pojawi się ten komunikat. Żeby mieć pewność, że makro zostanie przerwane zamieszczę przed końcem procedury linijkę z komunikatem “Koniec programu”.

Exit Sub nie pozwoli na wyświetlenie komunikatu Koniec programu

Exit For?

Ten komunikat nigdy się nie wyświetli, chyba, że zmodyfikuję dane. Polecenie Exit służy jednak nie tylko przerywaniu procedury. Można przerwać nim również pętlę i w przypadku pętli For Next pełne polecenie przerywające pętlę brzmi Exit For.

Spodobał Ci się artykuł ? Udostępnij go znajomym.

Share on facebook
Share on linkedin
Share on twitter

2 thoughts on “Exit Sub czy End Sub? Co za różnica?”

Leave a Comment

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *