Excel VBA przy błędzie Wznów dalej
VBA On Error Resume Next to instrukcja obsługi błędów. Jeśli błąd wystąpi podczas wykonywania kodu, zamiast wyświetlać błąd, aby wznowić następny wiersz kodu przez zignorowanie komunikatu o błędzie, możesz użyć tej instrukcji.
Ci, którzy regularnie piszą kody w Excel VBA, wiedzą, że mogą otrzymać błędy nawet po napisaniu sprawnych kodów, ale chcą zignorować ten błąd i kontynuować pracę z następnymi wierszami kodu. Typowym przykładem otrzymania komunikatu o błędzie jest sytuacja, gdy funkcja arkusza WYSZUKAJ.PIONOWO nie znajduje wartości wyszukiwania z tablicy tabeli. Nie zwróci błędu # N / A; raczej wyrzuci błąd. Jako „Nie można pobrać właściwości WYSZUKAJ.PIONOWO klasy funkcji arkusza”.

Jeśli nie wiesz, dlaczego otrzymujemy ten błąd, bardzo trudno jest go naprawić. W VBA mamy funkcję o nazwie „ Wznów po błędzie ”.
Co robi w przypadku ponownego wznowienia błędu w języku VBA?
Są pewne obszary jako koder. Będziemy wiedzieć na pewno, że spowoduje to wyświetlenie komunikatu o błędzie, ale musimy zignorować ten błąd, aby kontynuować przeglądanie kodu, więc sposób zignorowania tego błędu jest powszechną wątpliwością każdego.
Używając instrukcji VBA On Error Resume Next, możemy zignorować błąd i wznowić następny wiersz kodu.
Przykład 1
Załóżmy, że masz wiele arkuszy roboczych, a niektóre z nich ukrywasz w ramach projektu VBA. Na przykład poniżej znajdują się arkusze, które mam w swoim arkuszu.

Napisałem kody, aby ukryć arkusze „Sprzedaż i zysk”, a poniżej znajduje się kod.
Kod:
Sub On_Error () Worksheets ("Sales"). Visible = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

Teraz zacznę uruchamiać kod wiersz po wierszu za pomocą klawisza F8 .

Jeśli nacisnę F8 jeden klucz więcej czasu, będzie to ukryć arkusz o nazwie „ Sprzedaż ”.


Teraz jeszcze raz naciśnij klawisz F8 i zobacz, co się stanie.

Wystąpił błąd „Indeks dolny poza zakresem”, ponieważ bieżący wiersz kodu zawiera poniższe informacje.
Arkusze robocze („Zysk 2019”). Widoczne = xlVeryHidden
Próbuje ukryć arkusz o nazwie „ Zysk 2019 ”, ale nie ma arkusza o nazwie „Zysk 2019”.
W takich przypadkach, jeśli arkusz nie istnieje w skoroszycie, musimy zignorować błąd i kontynuować uruchamianie kodu, ignorując błąd „Indeks poza zakresem”.
Następna linia kodu mówi
Arkusze robocze („Zysk”). Widoczne = xlVeryHidden
Ten arkusz istnieje w tym skoroszycie, więc bez zignorowania błędu nie możemy przejść do tego wiersza kodu.
Aby zignorować ten błąd, musimy dodać instrukcję „On Error Resume Next”.
Kod:
Sub On_Error () On Error Resume Next Worksheets („Sales”). Visible = xlVeryHidden Worksheets („Profit 2019”). Visible = xlVeryHidden Worksheets („Profit”). Visible = xlVeryHidden End Sub

Jak widać powyżej, dodałem instrukcję u góry kodu przed rozpoczęciem którejkolwiek z linii. Teraz uruchom kod i zobacz, co się stanie.

Teraz jestem w linii, w której poprzednio podano błąd, naciśnij klawisz F8 i zobacz, co się stanie.

Przeskoczyłem do następnego wiersza kodu bez pokazania żadnego błędu z powodu instrukcji, którą dodaliśmy u góry, czyli instrukcja VBA „On Error Resume Next”.
Przykład nr 2
Teraz zobaczymy, jak używać tej instrukcji na jeszcze jednym przykładzie. Spójrz na poniższą strukturę danych w tym przykładzie.

Mamy dwie tabele nad pierwszą tabelą, które mają nazwę Emp i szczegóły ich wynagrodzenia w drugiej tabeli, a mamy tylko nazwę Emp, więc używając WYSZUKAJ.PIONOWO, musimy pobrać szczegóły wynagrodzenia z tabeli po lewej stronie.
Poniżej znajduje się kod, który napisałem, aby pobrać szczegóły.
Kod:
Sub On_Error1 () Dim k As Long For k = 2 to 8 Cells (k, 6) .Value = WorksheetFunction.VLookup (Cells (k, 5), Range ("A: B"), 2, 0) Next k End Pod

Teraz uruchom kod wiersz po wierszu i zobacz, co się stanie.


Po uruchomieniu pierwszego kodu komórki otrzymaliśmy wynik dla pierwszego pracownika. Powtórz to samo dla drugiego pracownika.

Tym razem otrzymaliśmy komunikat o błędzie. Spójrzmy na nazwisko drugiego pracownika w tabeli.

The second employee name is “Gayathri,” but this name doesn’t not exists in the first table, so the VBA VLOOKUP function doesn’t return “#N/A” error when the VLOOKUP doesn’t find the lookup value from the table; rather, it gives the above error message.
Our aim is if the employee name doesn’t find in the table, then we need an empty cell for that employee and ignore the error and give results for the remaining names.
We need to add the “On Error Resume Next” statement inside the loop.
Code:
Sub On_Error1() Dim k As Long For k = 2 To 8 On Error Resume Next Cells(k, 6).Value = WorksheetFunction.VLookup(Cells(k, 5), Range("A:B"), 2, 0) Next k End Sub

Now run the code and see the result.

Na liście nie ma dwóch nazwisk pracowników, „ Gayathri i Karanveer ”, więc te kody linii musiały napotkać błąd, ponieważ dodaliśmy instrukcję obsługi błędów „ On Error Resume Next ” zignorowała ten wiersz kodu i wznowiła dla następnego pracownika.
O czym należy pamiętać
- „On Error Resume Next” to instrukcja obsługi błędu, kiedy musimy zignorować znany błąd.
- Jeśli chcesz zignorować komunikat o błędzie tylko dla określonego zestawu kodu, zamknij instrukcję dotyczącą błędu wznowienia następnej instrukcji, dodając instrukcję „ On Error GoTo 0 ”.