VBA w instrukcjach błędów - 3 najlepsze sposoby radzenia sobie z błędami

Instrukcja Excel VBA w przypadku błędu

Instrukcja VBA On Error jest rodzajem mechanizmu obsługi błędów, który jest używany do kierowania kodem do tego, co zrobi, jeśli napotka jakiś rodzaj błędu, generalnie gdy kod napotka błąd, wykonywanie zatrzymuje się, ale z tą instrukcją w kodzie wykonanie instrukcji Kod jest kontynuowany, ponieważ zawiera zestaw instrukcji do wykonania, gdy napotka błąd.

Przewidywanie błędu w kodzie sprawia, że ​​jesteś profesjonalistą w kodowaniu VBA. Nie możesz uczynić kodu w 100% wydajnym. Nawet jeśli masz pewność co do swojego kodu w taki czy inny sposób, może to spowodować błąd.

Identyfikacja i obsługa każdego rodzaju błędu jest prawie niemożliwym zadaniem, ale mamy różne sposoby radzenia sobie z błędami w VBA. Podczas pisania kodu możesz nie przewidzieć, jakiego rodzaju kod błędu może się pojawić, ale jeśli wystąpi jakiś błąd, poświęcisz więcej czasu na debugowanie niż na pisanie samego kodu.

Co to jest błąd?

Błąd to nic innego jak wiersz kodu, którego nie można wykonać z powodu funkcjonalności lub niewłaściwego kodu. Spróbuj więc przewidzieć błąd i sobie z nim poradzić.

Na przykład, jeśli spróbujesz usunąć arkusz, którego tam nie ma, to oczywiście nie możemy wykonać tej linii kodu.

Istnieją trzy rodzaje błędów: jeden to błąd kompilacji spowodowany niezadeklarowanymi zmiennymi. Drugi to błąd wprowadzania danych spowodowany błędnymi wpisami przez programistę, a trzeci to błąd czasu wykonywania spowodowany tym, że VBA nie rozpoznaje linii kodu. Za próbę uzyskania dostępu lub pracy nad arkuszem lub skoroszytem, ​​których tam nie ma.

Ale mamy instrukcję w VBA do obsługi wszystkich tego typu błędów, np. Instrukcję „On Error”.

Typy instrukcji On Error

Kluczowym punktem obsługi błędów w VBA jest instrukcja „On Error”. Na przykład w przypadku błędu, „wznów następny wiersz”, „przejdź do innego wiersza lub przejdź do niego” itd.…

Instrukcja On Error zawiera trzy rodzaje instrukcji.

  1. GoTo 0 oznacza, że ​​za każdym razem, gdy wystąpi błąd w czasie wykonywania, program Excel lub VBA powinien wyświetlić okno komunikatu o błędzie, informujące o rodzaju napotkanego błędu. Gdy tylko VBA wykona kod, wyłącza wszystkie procedury obsługi błędów w tym konkretnym bloku kodu.
  2. Resume Next oznacza, że ​​za każdym razem, gdy wystąpi błąd, ta instrukcja instruuje program Excel, aby zignorował ten błąd i przeszedł do (wznowienia następnego) następnego wiersza kodu bez wyświetlania żadnych komunikatów o błędach. Nie oznacza to, że naprawi błąd; raczej po prostu ignoruje błąd.
  3. GoTo (etykieta) oznacza, że ​​gdy VBA napotka błąd, przejdź do przypisanej etykiety. To sprawia, że ​​kod przeskakuje do określonej linii dostarczonej przez programistę.

Najlepsze 3 sposoby obsługi błędów w VBA

# 1 - Po błędzie Wznów Dalej

Załóżmy, że dzielisz wartość 20 przez 0 i zadeklarowałeś zmienną, aby przypisać do niej wynik dzielenia.

Kod:

Sub OnError_Example1 () Dim i As Integer i = 20/0 End Sub

Uruchomienie tego kodu spowoduje wyświetlenie poniższego błędu.

Nie możesz więc podzielić żadnej liczby przez wartość zerową. Numer błędu czasu wykonywania to 11, tj. Dzielenie przez zero.

Teraz dodam jeszcze jedną linię do kodu.

Kod:

Sub OnError_Example1 () Dim i As Integer, j As Integer i = 20/0 j = 20/2 End Sub

Teraz dodam na górze stwierdzenie W przypadku błędu wznów dalej.

Kod:

Sub OnError_Example1 () Dim i As Integer, j As Integer On Error Resume Next i = 20/0 j = 20/2 End Sub

Jeśli teraz wykonam ten kod, nie wyświetli mi się żadnych komunikatów o błędach; raczej wykona następny wiersz kodu, tj. j = 20/2.

# 2 - Etykieta błędu GoTo

Zadeklarowałem trzy zmienne.

Kod:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer

Dla wszystkich tych trzech zmiennych przypiszę obliczenie dzielenia.

Kod:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5

Wynik wszystkich tych trzech obliczeń zostanie wyświetlony w oknie komunikatu.

Kod:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5 MsgBox "Wartość i to" & i & vbNewLine & "Wartość j to "& j & _ vbNewLine &" Wartość k to "& k & vbNewLine End Sub

Teraz spróbuję wykonać ten kod, ponieważ obliczenie „I” nie jest prawidłowe. Otrzymamy błąd czasu wykonania 11.

Teraz dodam instrukcję „On Error Resume Next”.

Kod:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error Resume Next i = 20/0 j = 20/2 k = 10/5 MsgBox "Wartość i to" & i & vbNewLine & " wartość j to "& j & _ vbNewLine &" Wartość k to "& k & vbNewLine End Sub

Jeśli to wykonam, pominie on obliczenie „I” i wykona pozostałe dwa obliczenia, a wynik będzie następujący.

Teraz zamiast „Przy błędzie Resume Next” dodam „On Error GoTo KCalculation”.

Kod:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error GoTo KCalculation: i = 20/0 j = 20/2 KCalculation: k = 10/5 MsgBox "Wartość i to" & i & vbNewLine & "Wartość j to" & j & _ vbNewLine & "Wartość k to" & k & vbNewLine End Sub
Uwaga: Tutaj „KCalculation” to nazwa etykiety, którą nadałem; możesz podać własną nazwę etykiety bez spacji.

Teraz, jeśli wykonam ten wiersz kodu, nie przeskoczy on do następnego wiersza. Zamiast tego przeskoczy do nazwy etykiety, którą wprowadziłem, tj. „KCalcualtion”. Tutaj zignoruje błąd podany przez „I”, a także nie wykona obliczenia „j”, ale od razu przejdzie do „KCalcualtion”.

# 3 - Wydrukuj numer błędu w VBA

Na końcu kodu możemy również wydrukować numer błędu w osobnym oknie komunikatu. Poniższy wiersz kodu wykona tę pracę.

Kod:

Numer błędu

Teraz uruchomię ten kod w pierwszym oknie komunikatu pokaże wyniki obliczeń.

Kliknij OK. Pokaże się jeszcze jedno okno komunikatu, aby pokazać numer błędu.

Jedziemy 11; w rezultacie, czyli Division by Zero.

Zamiast numeru możemy też otrzymać opis błędu. Musimy tylko zmienić kod. Poniżej znajduje się kod.

Kod:

Err.Description

Pokaże się taki opis.

Rzeczy do zapamiętania

  • Po wpisaniu „On Error Resume Next” na końcu kodu nie zapomnij dodać wyrażenia „On Error GoTo 0”.
  • Nazwa etykiety powinna być taka sama w obu miejscach.
  • Nazwy etykiet nie muszą być definiowane z dużym wyprzedzeniem.
  • Na koniec zawsze sprawdź, jaki błąd wystąpił w oddzielnym oknie komunikatu.

Interesujące artykuły...