VBA On Error Resume Next lub Idź do 0

W tym samouczku wyjaśniono instrukcje VBA On Error Resume Next i Goto.

Nawet jeśli Twój kod jest doskonale skonstruowany, użytkownik może nie zrobić tego, czego byś oczekiwał. Z tego powodu musisz wstawić obsługę błędów do swojego kodu, gdy może istnieć powód, dla którego może wystąpić błąd.

Przy błędzie Wznów Dalej

Instrukcja On Error Resume Next nakazuje VBA pominąć wszystkie wiersze kodu zawierające błędy i przejść do następnego wiersza. VBA zignoruje wiersz lub wiersze z błędem i przejdzie do następnego wiersza kodu.

Jest to przydatne, gdy wiersz kodu, który można zignorować, nie jest krytyczny dla pomyślnego uruchomienia makra, ale może być dość niebezpieczny, jeśli zostanie użyty niepoprawnie, ponieważ może dawać niezamierzone wyniki.

Na przykład w poniższej procedurze:

123456 Sub Ukryj wszystkie arkusze()Dim ws As WorksheetDla każdego ws w ActiveWorkbook.Sheetsws.Widoczny = FałszNastępnyNapis końcowy

Jeśli uruchomimy ten kod, otrzymamy błąd, ponieważ nie możemy ukryć wszystkich arkuszy w skoroszycie - przynajmniej jeden skoroszyt musi pozostać widoczny.

Jeśli jednak zmienimy procedurę, jak pokazano poniżej, kod będzie kontynuowany po błędzie i pozostawi widoczny ostatni arkusz w skoroszycie.

1234567 Sub Ukryj wszystkie arkusze()Przy błędzie Wznów DalejDim ws As WorksheetDla każdego ws w ActiveWorkbook.Sheetsws.Widoczny = FałszNastępnyNapis końcowy

W przypadku błędu Przejdź do 0

Jeśli nie mamy w naszym kodzie obsługi błędów, W przypadku błędu Przejdź do 0 to domyślne ustawienie programu Excel. Zasadniczo oznacza to, że gdy wystąpi błąd z W przypadku błędu Przejdź do 0, VBA przestanie wykonywać kod i wyświetli standardowe okno komunikatu o błędzie, na przykład:

Jeśli umieściliśmy pułapkę błędu, taką jak Przy błędzie Wznów Dalej w naszym kodzie, ale potem chcemy zresetować błąd do wartości domyślnych, możemy wstawić an W przypadku błędu Przejdź do 0 wiersz do naszego kodu.

12345678910 Błąd podrzędny Przejdź do 0()Przy błędzie Wznów DalejDim ws As WorksheetDla każdego ws w ActiveWorkbook.Sheetsws.Widoczny = FałszNastępnyW przypadku błędu Przejdź do 0'Uruchom więcej kodu tutaj, na przykład:ActiveSheet.Name = "Arkusz1"Napis końcowy

Teraz, jeśli w naszym kodzie miał być jakiś błąd po W przypadku błędu Przejdź do 0 linia, pojawi się domyślny komunikat o błędzie programu Excel. W tym przykładzie mamy już arkusz o nazwie Arkusz1 w ActiveWorkbook jako kod powyżej W przypadku błędu Przejdź do 0 ukrywa arkusz, ale go nie usuwa. Zostanie wtedy wyświetlony domyślny komunikat o błędzie programu Excel wskazujący, że nazwa arkusza została już zajęta.

W przypadku błędu Idź do Linia

Możemy również zmusić nasz kod do przejścia do innej linii kodu, używając W przypadku błędu Przejdź do Linia co mówi VBA, aby przejść do określonej linii kodu, jeśli wystąpi błąd.

123456789101112 Błąd podrzędnyPrzejdź do linii()Przy błędzie Wznów DalejDim ws As WorksheetDla każdego ws w ActiveWorkbook.Sheetsws.Widoczny = FałszNastępnyW przypadku błędu GoTo errhandlerActiveSheet.Name = "Arkusz1"Wyjście Subbłędnik:MsgBox("Istnieje już arkusz o nazwie sheet1!", vbCritical)Napis końcowy

W powyższym przykładzie, gdy kod znajdzie arkusz „Arkusz1”, przesuwa się do wiersza kodu poniżej etykiety obsługi błędu - w tym przypadku wywołuje niestandardowe okno komunikatu informujące użytkowników, że arkusz już się zakończył. Etykieta obsługi błędów musi mieć po niej dwukropek, aby pokazać VBA, że jest to etykieta.

1 błędnik:

Kod przeskoczy następnie do wiersza pod etykietą i zwróci niestandardowe okno wiadomości.

Jest to przydatne, gdy nie chcesz, aby użytkownik mógł kliknąć Debuguj, aby przejść do kodu, ponieważ standardowy komunikat programu Excel zawsze daje opcję debugowania kodu.

Potrzebujemy również Wyjście Sub w procedurze. Jeśli jest NIE arkusz o nazwie Arkusz1, a następnie ten wiersz kodu zostanie uruchomiony i zmieni nazwę aktywnego arkusza na Arkusz1. Następnie chcemy, aby kod się kończył - nie chcemy, aby kontynuował obsługę błędów i wyświetlał okno komunikatu. Linia Exit Sub następnie kończy procedurę i zatrzymuje kod.

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave