On Error — Instrukcja (Visual Basic)
Umożliwia wykonywanie procedury obsługi błędów i określa lokalizację rutynowych w ramach procedury; można również wyłączyć procedury obsługi błędów.
Bez On Error instrukcji, każdy błąd w czasie wykonywania jest krytyczny: wyświetlany jest komunikat o błędzie i zatrzyma wykonywanie.
W każdym przypadku, gdy jest to możliwe, sugerujemy użyć structured exception obsługi w kodzie zamiast przy użyciu obsługi wyjątków niestrukturalnych i On Error instrukcji.Aby uzyskać więcej informacji, zobacz Try...Catch...Finally — Instrukcja (Visual Basic).
[!UWAGA]
Error Słowo kluczowe jest również używane w Error — Instrukcja, która jest obsługiwana dla zgodności z poprzednimi wersjami.
On Error { GoTo [ line | 0 | -1 ] | Resume Next }
Części
Termin |
Definicja |
GoToline |
Umożliwia rutynowych obsługi błędów, który zaczyna się od wiersza określonego w wymaganych line argument.line Argument jest każda etykieta wiersza lub numer wiersza.Jeśli wystąpi błąd w czasie wykonywania, kontroli oddziałów do określonego wiersza, uaktywnianie obsługi błędów.Określonego wiersza musi być w tej samej procedury co On Error wystąpi instrukcji lub błąd w czasie kompilacji. |
GoTo 0 |
Wyłącza narzędzie obsługi błędów włączona w bieżącej procedury i resetuje go do Nothing. |
GoTo -1 |
Wyłącza włączonego wyjątku w bieżącej procedury i resetuje go do Nothing. |
Resume Next |
Określa, że gdy wystąpi błąd w czasie wykonywania, kontroli przechodzi do instrukcji znajdującej się bezpośrednio po instrukcji, gdzie wystąpił błąd i wykonywanie jest kontynuowane od tego momentu.Ten formularz zamiast On Error GoTo podczas uzyskiwania dostępu do obiektów. |
Uwagi
[!UWAGA]
Zalecane użycie structured exception handling w kodzie w każdym przypadku, gdy jest to możliwe, zamiast przy użyciu obsługi wyjątków niestrukturalnych i On Error instrukcji.Aby uzyskać więcej informacji, zobacz Try...Catch...Finally — Instrukcja (Visual Basic).
Obsługa błędów "enabled" to taka, która jest włączona przez On Error instrukcji.Obsługa błędów "aktywne" jest włączone obsługi, który jest w trakcie procesu obsługi błędu.
Jeśli wystąpi błąd, gdy obsługa błędów jest aktywny (między wystąpienia błędu i Resume, Exit Sub, Exit Function, lub Exit Property instrukcji), bieżącej procedury obsługi błędów nie może obsłużyć błędu.Kontrola zwraca wywołanie procedury.
Jeśli wywołanie procedury obsługi błędów włączone, jest on uaktywniany do obsługi błędu.Jeżeli aktywny jest wywołanie procedury obsługi błędów, kontroli przekazywane z powrotem przez poprzednie wywołanie procedury obsługi błędów włączone, ale nieaktywny, w celu znalezienia.Jeśli brak obsługi błędów zostanie znaleziony, błąd jest krytyczny w punkcie, w którym to rzeczywiście nastąpiło.
Każdorazowo obsługi błędów przekazuje kontrolę z powrotem wywołanie procedury, procedura ta staje się bieżącej procedury.Po błąd jest obsługiwane przez funkcję obsługi błędów w każdej procedurze, wykonanie jest wznawiany w bieżącej procedury w punkcie wyznaczonym przez Resume instrukcji.
[!UWAGA]
Procedury obsługi błędów nie jest Sub procedury lub Function procedury.Jest sekcja kodu oznaczonego etykietą wiersza lub numer wiersza.
Właściwość Number
Procedur obsługi błędów polegać na wartość w Number właściwość Err obiekt, aby ustalić przyczynę błędu.Rutynowe należy przetestować lub zapisać odpowiednie wartości właściwości w Err obiekt przed innymi błąd może wystąpić w lub przed procedurę, która może spowodować błąd jest nazywany.Właściwość wartości w Err obiektu odzwierciedla ostatni błąd.Komunikat o błędzie związane z Err.Number znajduje się w Err.Description.
Instrukcja throw
Błąd, który jest uruchamiany z Err.Raise Ustawia metodę Exception właściwość do nowo utworzone wystąpienie Exception klasy.W celu wspierania podnoszenia wyjątki typów pochodnych wyjątek Throw instrukcji jest obsługiwana w języku.Zajmuje to jeden parametr, który jest wystąpienie wyjątku, zostać wygenerowany.Poniższy przykład pokazuje, w jaki sposób te funkcje mogą być używane z istniejącej obsługi obsługi wyjątków:
On Error GoTo Handler
Throw New DivideByZeroException()
Handler:
If (TypeOf Err.GetException() Is DivideByZeroException) Then
' Code for handling the error is entered here.
End If
Warto zauważyć, że On Error GoTo instrukcji pułapki wszystkie błędy, niezależnie od klasy wyjątek.
On Error Resume Next
On Error Resume Nextpowoduje wykonanie kontynuować instrukcji, niezwłocznie po instrukcji, która spowodowała błąd w czasie wykonywania lub przy użyciu instrukcji, bezpośrednio po ostatnio wywołanie z zawierających procedurę On Error Resume Next instrukcji.Ta instrukcja zezwala na wykonywanie kontynuować pomimo błąd w czasie wykonywania.Można umieścić procedury obsługi błędów, gdzie mogłoby wystąpić błąd zamiast przeniesienia kontroli do innej lokalizacji w ramach procedury.On Error Resume Next Instrukcji dezaktywowaniu po wywołaniu innej procedury, dlatego należy wykonać On Error Resume Next instrukcji w każdym o nazwie rutynowych, jeśli chcesz, aby błąd wbudowanej obsługi w ramach tej procedury.
[!UWAGA]
On Error Resume Next Konstrukcji mogą być lepiej On Error GoTo podczas obsługi błędów generowanych podczas uzyskiwania dostępu do innych obiektów.Sprawdzanie Err po każdej interakcji z obiektem usuwa niejednoznaczności, o którym obiektu uzyskano kod.Możesz mieć pewność obiektu, który jest umieszczony kod błędu w Err.Number, jak również obiektu, który pierwotnie wygenerowany błąd (obiekt, określona w Err.Source).
On Error GoTo 0
On Error GoTo 0Wyłączenie obsługi błędów w bieżącej procedury.Go nie określono wiersza 0 jako początek kod obsługi błędów, nawet jeśli procedura zawiera jeden wiersz, ponumerowane 0.Bez On Error GoTo 0 instrukcji, obsługa błędów jest automatycznie wyłączana podczas procedury jest zakończony.
On Error GoTo -1
On Error GoTo -1Wyłącza wyjątek w bieżącej procedury.Nawet jeśli procedura zawiera jeden wiersz, numerowane -1 nie określa linii -1 jako początek kod obsługi błędów.Bez On Error GoTo -1 instrukcji, wyjątek jest automatycznie wyłączana podczas procedury jest zakończony.
Umieścić, aby zapobiec kod obsługi błędów, gdy wystąpił żaden błąd, Exit Sub, Exit Function, lub Exit Property instrukcji bezpośrednio przed rutynowe obsługi błędów w następujący fragment:
Public Sub InitializeMatrix(ByVal Var1 As Object, ByVal Var2 As Object)
On Error GoTo ErrorHandler
' Insert code that might generate an error here
Exit Sub
ErrorHandler:
' Insert code to handle the error here
Resume Next
End Sub
W tym miejscu następuje kod obsługi błędów Exit Sub instrukcji i poprzedza End Sub instrukcji wyodrębnienie jej z przepływu procedury.Kod obsługi błędów można umieścić w dowolnym miejscu w procedurze.
Błędy untrapped
Untrapped błędy w obiektach zwracane są do kontrolowania aplikacji działa obiekt jako plik wykonywalny.Środowiska programistycznego untrapped błędy są zwracane do aplikacji sterowania tylko wtedy, gdy jest to właściwe opcje są ustawione.W dokumentacji aplikacji hosta opis, którego opcje powinny być ustawione podczas debugowania i sposobu ich ustawiania, czy host można utworzyć klasy.
Jeśli tworzysz obiekt, który uzyskuje dostęp do innych obiektów, należy spróbować obsłużyć nieobsługiwany błędy, które przechodzą one ponownie.Jeśli nie można mapować kody błędów w Err.Number do jednego z własnych błędy i następnie przebiegu ich wróć do obiektu wywołującego.Należy określić ten błąd przez dodanie kodu błędu VbObjectError stałą.Na przykład jeśli kod błędu jest 1052, przypisz go w następujący sposób:
Err.Number = vbObjectError + 1052
Przestroga |
---|
Błędy systemu podczas wywołania Windows dołączanych dynamicznie bibliotek (dll) nie powodują wystąpienie wyjątków i nie może być zalewkowany z wyłapywanie błędów języka Visual Basic.Podczas wywoływania funkcji DLL, należy sprawdzić każdy wartość zwracana dla sukcesu lub niepowodzenia (zgodnie ze specyfikacją interfejsu API), a w przypadku wystąpienia błędu, sprawdź wartość Err obiektu LastDLLError właściwości. |
Przykład
W tym przykładzie najpierw używa On Error GoTo instrukcji, aby określić lokalizację procedury obsługi błędów w ramach procedury.Na przykład próba dzielenia przez zero generuje numer błędu 6.Błąd jest realizowany w procedury obsługi błędów, a sterowanie jest zwracane, następnie do instrukcji, która spowodowała błąd.On Error GoTo 0 Instrukcji wyłącza wyłapywanie błędów.Następnie On Error Resume Next instrukcji jest używany do odroczyć błąd nadlewek i podlewek, tak, że kontekst dla błędów generowanych następna instrukcja może być dla niektórych znana.Należy zauważyć, że Err.Clear do oczyszczenia Err właściwości obiektu po obsługi błędu.
Public Sub OnErrorDemo()
On Error GoTo ErrorHandler ' Enable error-handling routine.
Dim x As Integer = 32
Dim y As Integer = 0
Dim z As Integer
z = x / y ' Creates a divide by zero error
On Error GoTo 0 ' Turn off error trapping.
On Error Resume Next ' Defer error trapping.
z = x / y ' Creates a divide by zero error again
If Err.Number = 6 Then
' Tell user what happened. Then clear the Err object.
Dim Msg As String
Msg = "There was an error attempting to divide by zero!"
MsgBox(Msg, , "Divide by zero error")
Err.Clear() ' Clear Err object fields.
End If
Exit Sub ' Exit to avoid handler.
ErrorHandler: ' Error-handling routine.
Select Case Err.Number ' Evaluate error number.
Case 6 ' Divide by zero error
MsgBox("You attempted to divide by zero!")
' Insert code to handle this error
Case Else
' Insert code to handle other situations here...
End Select
Resume Next ' Resume execution at same line
' that caused the error.
End Sub
Wymagania
Obszar nazw: Microsoft.VisualBasic
Montaż: biblioteki wykonawczej języka Visual Basic (w Microsoft.VisualBasic.dll)
Zobacz też
Informacje
Exit — Instrukcja (Visual Basic)
Try...Catch...Finally — Instrukcja (Visual Basic)