Sdílet prostřednictvím


Nestrukturovaný přehled (Visual Basic) zpracování výjimek

V nestrukturovaném zpracování výjimek umístíte příkaz On Error na začátku bloku kódu a ten zpracovává chyby, které se vyskytnou v tomto bloku. Když je vyvolána výjimka v proceduře po provedení příkazu On Error, program přeskočí na řádku argumentu zadanou v příkazu On Error. Řádkový argument, je číslo řádku nebo jmenovka řádku, který označuje lokaci kódu zpracovávajícího vyjímky.

Někdy je provedeno volání z původní procedury do jiné procedury a k vyjímce dojde v volané proceduře. V takových případech, pokud volaná procedura nezpracuje výjimku, vyjímka se šíří zpět do volající procedury a dojde k přeskočení na řádkový argument.

Poznámka

Nestrukturované zpracování chyb pomocí On Error může snížit výkon aplikace a výsledný kód je obtížně laditelný a udržovatelný. Doporučenou metodou je strukturované zpracování chyb. Další informace naleznete v tématu Přehled strukturovaného zpracování výjimek pro jazyk Visual Basic.

On Error GoTo Line

Příkaz On Error GoTo Line předpokládá, že kód pro zpracování chyby začíná na řádku specifikovaném v požadovaném line argumentu. Pokud dojde k chybě běhu, ovládání přejde k jmenovce řádku nebo k řádku s číslem zadaným v argumentu a dojde k aktivaci obslužné rutiny . Zadaná řádka musí být ve stejné proceduře jako příkaz On Error GoTo Line, jinak Visual Basic vygeneruje chybu kompilátoru. Následující příklad ukazuje použití obslužné rutiny chyby s jmenovkou řádku:

Sub TestSub
   On Error GoTo ErrorHandler
      ' Code that may or may not contain errors.
   Exit Sub

   ErrorHandler:
      ' Code that handles errors.
      Resume
End Sub

Tento příklad obsahuje obslužnou rutinu chyby s názvem ErrorHandler. Pokud jakkoliv kód v pokrutině TestSub vygeneruje chybu, Visual Basic okamžitě spustí kód, který následuje po jmenovce ErrorHandler. Na konci bloku zpracovávajícího chyby, příkaz Resume předá řízení zpět na řádek kódu, kde se vyskytla chyba. Zbytek podprogramu poté pokračuje ve spouštění jako by k chybě nedošlo.

Poznámka

Je nutné umístit příkaz ExitSub bezprostředně před blokem zpracovávajícím chybu. Jinak Visual Basic spustí kód pro zpracování chyby při dosažení konce subrutiny a způsobující nežádoucí nebo neočekávané výsledek.

On Error Resume Next

Příkaz On Error Resume Next určuje, že v případě chyby běhu, ovládací prvek předá řízení do ovládacího prvku, který je bezprostředně za tím, ve kterém došlo k vyvolání chyby. V tomto okamžiku aplikace pokračuje. On Error Resume Next umožňuje umístění rutiny pro zpracování chyb, do míst ve kterých může dojít k chybě, spíše než přenášení řízení do jiného umístění v proceduře.

Poznámka

Pokud procedura volá jinou proceduru, příkaz On Error Resume Next je neaktivní v době provádění volané procedury. Proto byste měli umístit příkaz On Error Resume Next do každého volání procedury, ve které je potřeba. Toto je nutné, protože chování Resume Next se vztahuje pouze na procedury obsahující příkaz On Error Resume Next. V případě neošetřené chyby ve volané proceduře se vyjímka rozšíří zpět do volající procedury a provádění pokračuje příkazem následujícím za voláním. V takových případech není provedeno zpracování chyby.

Resume může být také použito samostatně, ve vnějším příkazu On Error. Pokud je Resume použito tímto způsobem, Visual Basic vrátí řízení do příkazu, který způsobil chybu. Obecně používejte Resume poté co obslužná rutina opraví chybu.

Visual Basic také poskytuje příkaz ResumeNext, který přesměruje řízení na řádek, který následuje bezprostředně po řádku kódu, který způsobil chybu. Můžete použít Resume Next pro případy, ve které chyby nezpůsobí zastavení práce aplikace (nefatální chyby). Může jej také použit, pokud chyba nezmění očekávaný výsledek subrutiny.

Další variantou příkazu Resume je Resume Line, která je podobná On Error GoTo Line. Resume Line předává řízení na řádku určíte v line argumentu. Resume Line můžete použít pouze v rámci zpracování chyb.

Poznámka

Při ladění kódu, je nutné vypnout příkaz On Error Resume Next.

On Error GoTo 0

Příkaz On Error GoTo 0zakáže všechny obslužné rutiny chyb v aktuální proceduře. Pokud nezahrnete příkaz On Error GoTo 0, obslužná rutina chyb je stále zakázáno, pokud procedura obsahuje obslužnou rutinu na konci.

Poznámka

Příkaz On Error GoTo 0 není určen k specifikování řádku 0 jako začátku kódu zpracování chyb, a to i v případě, že procedura obsahuje řádek s číslem 0.

On Error GoTo -1

Příkaz On Error GoTo -1 zakáže všechny obslužné rutiny výjimek v aktuální proceduře. Pokud zahrnete příkaz On Error GoTo -1, výjimka jsou automaticky zakázány po ukončení procedury.

Poznámka

Příkaz On Error GoTo -1 není určen k specifikování řádku -1 jako začátku kódu zpracování chyb, a to i v případě, že procedura obsahuje řádek s číslem -1.

Příklad nestrukturovaného zpracování vyjímek

V následujícím kódu, je obslužná rutina s názvem DivideByZero a zpracuje specifickou chybu – pokusu o dělení nulou. Pokud dojde k jiné chybě, Visual Basic vyvolá chybu chodu a ukončí aplikaci.

Sub ErrorTest ()
' Declare variables.
   Dim x As Integer, y As Integer, z As Integer
   ' The exception handler is named "DivideByZero".
   On Error GoTo DivideByZero
   ' The main part of the code, which might cause an error.
   x = 2
   y = 0
   z = x \ y

   ' This line disables the exception handler.
   On Error GoTo 0
      Console.WriteLine(x & "/" & y & " = " & z)

   ' Exit the subroutine before the error-handling code.
   ' Failure to do so can create unexpected results.
   Exit Sub

   ' This is the exception handler, which deals with the error.
   DivideByZero:
   ' Include a friendly message to let the user know what is happening.
   Console.WriteLine("You have attempted to divide by zero!")

   ' Provide a solution to the error.
   y = 2

   ' The Resume statement returns to the point at which
   ' the error first occurred, so the application
   ' can continue to run.
   Resume

End Sub

Viz také

Úkoly

Postupy: Načíst informace z objektu došlo k chybě (Visual Basic)

Odkaz

End Statement

Err

Exit Statement (Visual Basic)

On Error Statement (Visual Basic)

Resume Statement

Koncepty

Nestrukturovaný (Visual Basic) zpracování výjimek v objektu Err

Úvod do zpracování (Visual Basic) výjimek

Typy chyb (Visual Basic)

Volba použití strukturovaných či nestrukturovaných (Visual Basic) zpracování výjimek