2010-02-04 9 views
49

Ich kam zu einigen VBScript-Beispielen, und ich sah die Aussage im Grunde am Anfang des Skripts.Was macht die "On Error Resume Next" Anweisung?

Was macht es?

+6

Es ist ein sehr leistungsfähig, aber gefährlich wenig Syntax. Sei sehr vorsichtig damit. – Nate

+2

Es macht jetzt mehr Sinn. Nach einigen Funktionen, die zu Fehlern führen können. Sie haben eine Funktion namens checkError nach ihnen. – Omar

Antwort

65

Es sagt im Grunde das Programm, wenn Sie einen Fehler auftreten, nur in der nächsten Zeile fortfahren.

21

Wenn ein Fehler auftritt, wird die Ausführung in der nächsten Zeile fortgesetzt, ohne das Skript zu unterbrechen.

9

Wenn ein Fehler in der Zeile auftritt, wird vbscript angewiesen, die Ausführung fortzusetzen, ohne das Skript abzubrechen. Manchmal folgt die On Error das Goto Etikett des Fluss der Ausführung, so etwas wie dies in einem Sub Codeblock zu ändern, jetzt wissen Sie, warum und wie die Verwendung von GOTO in Spaghetti-Code zur Folge haben kann:

 
Sub MySubRoutine() 
    On Error Goto ErrorHandler 

    REM VB code... 

    REM More VB Code... 

Exit_MySubRoutine: 

    REM Disable the Error Handler! 

    On Error Goto 0 

    REM Leave.... 
    Exit Sub 

ErrorHandler: 

    REM Do something about the Error 

    Goto Exit_MySubRoutine 
End Sub 
+10

VBScript unterstützt die Syntax 'On Error Goto Label' nicht, nur 'On Error Goto 0'. – Helen

32

Es ist erwähnenswert, Selbst wenn On Error Resume Next in Kraft ist, ist das Err-Objekt immer noch gefüllt, wenn ein Fehler auftritt, so dass Sie immer noch Fehler im C-Stil behandeln können.

3

On Error-Anweisung - Gibt an, dass bei Auftreten eines Laufzeitfehlers die Steuerung an die Anweisung unmittelbar nach der Anweisung weitergeleitet wird. Wie auch immer Err-Objekt aufgefüllt wurde (Err.Number, Err.Count usw.)

0

On Error Resume Next bedeutet, dass bei einem Fehler die nächste Zeile fortgesetzt wird.

z.B. Wenn Sie den Try-Block versuchen, wird das Skript gestoppt, wenn ein Fehler aufgetreten ist.

+0

Verwenden von Try/Catch funktioniert nicht für mich in VBA (Excel 2016) noch VBScript. – user2415376

0

Es ermöglicht die Fehlerbehandlung. Im Folgenden ist zum Teil von https://msdn.microsoft.com/en-us/library/5hsw66as.aspx

' Enable error handling. When a run-time error occurs, control goes to the statement immediately following the statement where the error occurred, and execution continues from that point. 
On Error Resume Next 

SomeCodeHere 

If Err.Number = 0 Then 
    WScript.Echo "No Error in SomeCodeHere." 
Else 
    WScript.Echo "Error in SomeCodeHere: " & Err.Number & ", " & Err.Source & ", " & Err.Description 
    ' Clear the error or you'll see it again when you test Err.Number 
    Err.Clear 
End If 

SomeMoreCodeHere 

If Err.Number <> 0 Then 
    WScript.Echo "Error in SomeMoreCodeHere:" & Err.Number & ", " & Err.Source & ", " & Err.Description 
    ' Clear the error or you'll see it again when you test Err.Number 
    Err.Clear 
End If 

' Disables enabled error handler in the current procedure and resets it to Nothing. 
On Error Goto 0 

' There are also `On Error Goto -1`, which disables the enabled exception in the current procedure and resets it to Nothing, 
' and `On Error Goto line`, which enables the error-handling routine that starts at the line specified in the required line argument. The line argument is any line label or line number. If a run-time error occurs, control branches to the specified line, making the error handler active. The specified line must be in the same procedure as the On Error statement, or a compile-time error will occur.