I came to some VBScript examples, and I saw the statement On Error Resume Next
basically at the beginning of the script.
What does it do?
Helen
81.1k14 gold badges227 silver badges285 bronze badges
asked Feb 4, 2010 at 20:18
Carlos BlancoCarlos Blanco
8,51216 gold badges71 silver badges100 bronze badges
3
It basically tells the program when you encounter an error just continue at the next line.
answered Feb 4, 2010 at 20:19
It’s worth noting that even when On Error Resume Next
is in effect, the Err object is still populated when an error occurs, so you can still do C-style error handling.
On Error Resume Next
DangerousOperationThatCouldCauseErrors
If Err Then
WScript.StdErr.WriteLine "error " & Err.Number
WScript.Quit 1
End If
On Error GoTo 0
answered Feb 5, 2010 at 15:49
TmdeanTmdean
9,02843 silver badges51 bronze badges
When an error occurs, the execution will continue on the next line without interrupting the script.
answered Feb 4, 2010 at 20:19
It means, when an error happens on the line, it is telling vbscript to continue execution without aborting the script. Sometimes, the On Error
follows the Goto
label to alter the flow of execution, something like this in a Sub
code block, now you know why and how the usage of GOTO
can result in spaghetti code:
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
answered Feb 4, 2010 at 20:28
t0mm13bt0mm13b
33.9k8 gold badges78 silver badges109 bronze badges
1
It enables error handling. The following is partly from 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.
answered Apr 25, 2017 at 18:52
alfredoalfredo
8258 silver badges11 bronze badges
On Error Statement — Specifies that when a run-time error occurs, control goes to the statement immediately following the statement. How ever Err object got populated.(Err.Number, Err.Count etc)
answered Jun 29, 2015 at 18:19
ChandralalChandralal
5592 gold badges11 silver badges26 bronze badges
0
On Error Resume Next means that On Error, It will resume to the next line to resume.
e.g. if you try the Try block, That will stop the script if a error occurred
answered Aug 16, 2016 at 20:10
LunarHunterLunarHunter
1051 gold badge1 silver badge7 bronze badges
1
На чтение 7 мин Просмотров 339 Опубликовано 16.12.2014
В этой статье мы рассмотри обработку ошибок в языке VBScript, а именно объектErr, конструкцию On Error Resume Next и On Error Goto 0. Конструкция VBScript On Error Resume Next включает обработку ошибок, а On Error Goto 0 отменяет их обработку.
Объект Err не нуждается в предварительном объявлении, и доступен всегда, давайте рассмотри его методы и свойства:
- Description — данное свойство содержит описание ошибки.
- Number — содержит целое число – номер ошибки. Если значение свойства Number ровно нулю – значит, ошибка отсутствует.
- Source — свойство содержит название приложения, в котором возникла ошибка.
Методы
Clear – полная очистка информации об ошибке. Стоит обратить внимание, что информация об ошибке автоматически очищается при выполнении операторов On Error Resume Next, Exit Sub и Exit Function.
Raise(number, [source, description]) – данный метод позволяет генерировать собственную ошибку времени выполнения. Видим, что тут можно задать параметры, аналогичные по своей принадлежности свойствам самого объекта Err. Видим, что тут является обязательным только первый параметр.
Хорошо, теперь давайте рассмотри четыре примера на языке vbscript.
Пример 1
'------------------------------------------------------------------------------' vbscript on error resume next' произойдет вычисление только для первых 3 значений' on_error_1.vbs'------------------------------------------------------------------------------ OptionExplicit 'включаем обработку ошибокOnErrorResumeNext dim MyArr(8), icount, Result, msgErr, msg ' заполняем массив MyArr(0) = 5 MyArr(1) = -3 MyArr(2) = 15 MyArr(3) = 0 MyArr(4) = 2 MyArr(5) = 6 MyArr(6) = 0 MyArr(7) = -1 icount=0msg=""msgErr = "Ошибка!!!" & vbCrLf 'циклично делим число 15 на каждый элемент массиваDo result=15/MyArr(icount) If Err.Number <> 0 ThenmsgErr=msgErr & "Код ошибки: " & Err.Number & vbCrLf &_ "Описание: " & Err.Description & vbCrLf &_ "Приложение: " & Err.Source & vbCrLf result = msgErr msgErr=""endif icount = icount+1 msg=msg & Result & vbCrLf & vbCrLfLoopWhile (icount <8) MsgBox msg
В данном примере мы создали массив из 8 элементов, каждый из которых является числом, два элемента – являются нулями. В цикле do…loop (работа данного цикла рассмотрена в статье Урок 7 по VBScript: Циклы do…loop и while…wend) идет деление числа 15 на каждый элемент массива (Урок 9 по VBScript: Массивы). Так как мы не включили в данном примере очистку информации об ошибке, то произойдёт деление только первых трёх значений, а всё остальное будет принято за ошибку.
Пример 2
'------------------------------------------------------------------------------' vbscript on error resume next' Вычисления не произойдут' on_error_2.vbs'------------------------------------------------------------------------------ OptionExplicit 'включаем обработку ошибокOnErrorResumeNext dim MyArr(8), icount, Result, msgErr, msg ' заполняем массив MyArr(0) = 5 MyArr(1) = -3 MyArr(2) = 15 MyArr(3) = 0 MyArr(4) = 2 MyArr(5) = 6 MyArr(6) = 0 MyArr(7) = -1 icount=0msg=""msgErr = "Ошибка!!!" & vbCrLf 'циклично делим число 15 на каждый элемент массиваDo result=15/MyArr(icount) If Err.Number <> 0 ThenmsgErr=msgErr + "Код ошибки: " & Err.Number & vbCrLf &_ "Описание: " & Err.Description & vbCrLf &_ "Приложение: " & Err.Source & vbCrLf result = msgErr msgErr=""' Отменяем обработку ошибок!!!OnErrorGoto 0 endif icount = icount+1 msg=msg & result & vbCrLf & vbCrLfLoopWhile (icount <8) MsgBox msg
Тут мы дополнительно использовали конструкцию On Error Goto 0, которая отключает обработку ошибок. Это приведёт к тому, что никакие вычисления не будут произведены, и при запуске сценария автоматически произойдёт ошибка времени выполнения.
Скачать архив с примерами
Пример 3
'------------------------------------------------------------------------------' on error resume next vbscript' Правильный подход обработки ошибок' on_error_3.vbs'------------------------------------------------------------------------------ OptionExplicit 'включаем обработку ошибокOnErrorResumeNext dim MyArr(8), icount, Result, msgErr, msg ' заполняем массив MyArr(0) = 5 MyArr(1) = -3 MyArr(2) = 15 MyArr(3) = 0 MyArr(4) = 2 MyArr(5) = 6 MyArr(6) = 0 MyArr(7) = -1 icount=0msg=""msgErr = "Ошибка!!!" & vbCrLf 'циклично делим число 15 на каждый элемент массиваDo'Очищаем информацию об ошибке Err.Clear result=15/MyArr(icount) If Err.Number <> 0 ThenmsgErr=msgErr + "Код ошибки: " & Err.Number & vbCrLf &_ "Описание: " & Err.Description & vbCrLf &_ "Приложение: " & Err.Source & vbCrLf result = msgErr msgErr=""endif icount = icount+1 msg=msg & result & vbCrLf & vbCrLfLoopWhile (icount <8) MsgBox msg
В этом примере мы сделали все правильно, так как вначале цикла прописали Err.Clear, который очищает информацию о предыдущих ошибках.
Ну и наконец четвертый пример, тут мы генерируем собственное описание ошибки.
Пример 4
'------------------------------------------------------------------------------' on error resume next vbscript' генерация собственной ошибки' on_error_4.vbs'------------------------------------------------------------------------------ OptionExplicit 'включаем обработку ошибокOnErrorResumeNext dim MyArr(8), icount, Result, msgErr, msg ' заполняем массив MyArr(0) = 5 MyArr(1) = -3 MyArr(2) = 15 MyArr(3) = 0 MyArr(4) = 2 MyArr(5) = 6 MyArr(6) = 0 MyArr(7) = -1 icount=0msg=""msgErr = "Ошибка!!!" & vbCrLf 'циклично делим число 15 на каждый элемент массиваDo'Очищаем информацию об ошибке Err.Clear result=15/MyArr(icount) If Err.Number <> 0 ThenErr.Raise 100, "текущий сценарий", "пробуем делить на ноль" msgErr=msgErr + "Код ошибки: " & Err.Number & vbCrLf &_ "Описание: " & Err.Description & vbCrLf &_ "Приложение: " & Err.Source & vbCrLf result = msgErr msgErr=""endif icount = icount+1 msg=msg & result & vbCrLf & vbCrLfLoopWhile (icount <8) MsgBox msg
Давайте подытожим сказанной в данной статье…. Должен сказать, что материал получился довольно сухим на предмет обзора, это и не удивительно — большую часть занимают примеры программного кода. В целом, мы рассмотрели внутренний объект Err, который содержит методы и свойства для обработки исключительных ситуаций в сценариях на языке VBSCRIPT.
I came to some VBScript examples, and I saw the statement On Error Resume Next
basically at the beginning of the script.
What does it do?
Helen
81.1k14 gold badges227 silver badges285 bronze badges
asked Feb 4, 2010 at 20:18
Carlos BlancoCarlos Blanco
8,51216 gold badges71 silver badges100 bronze badges
3
It basically tells the program when you encounter an error just continue at the next line.
answered Feb 4, 2010 at 20:19
It’s worth noting that even when On Error Resume Next
is in effect, the Err object is still populated when an error occurs, so you can still do C-style error handling.
On Error Resume Next
DangerousOperationThatCouldCauseErrors
If Err Then
WScript.StdErr.WriteLine "error " & Err.Number
WScript.Quit 1
End If
On Error GoTo 0
answered Feb 5, 2010 at 15:49
TmdeanTmdean
9,02843 silver badges51 bronze badges
When an error occurs, the execution will continue on the next line without interrupting the script.
answered Feb 4, 2010 at 20:19
It means, when an error happens on the line, it is telling vbscript to continue execution without aborting the script. Sometimes, the On Error
follows the Goto
label to alter the flow of execution, something like this in a Sub
code block, now you know why and how the usage of GOTO
can result in spaghetti code:
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
answered Feb 4, 2010 at 20:28
t0mm13bt0mm13b
33.9k8 gold badges78 silver badges109 bronze badges
1
It enables error handling. The following is partly from 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.
answered Apr 25, 2017 at 18:52
alfredoalfredo
8258 silver badges11 bronze badges
On Error Statement — Specifies that when a run-time error occurs, control goes to the statement immediately following the statement. How ever Err object got populated.(Err.Number, Err.Count etc)
answered Jun 29, 2015 at 18:19
ChandralalChandralal
5592 gold badges11 silver badges26 bronze badges
0
On Error Resume Next means that On Error, It will resume to the next line to resume.
e.g. if you try the Try block, That will stop the script if a error occurred
answered Aug 16, 2016 at 20:10
LunarHunterLunarHunter
1051 gold badge1 silver badge7 bronze badges
1
Содержание
- On Error Statement (Visual Basic)
- Syntax
- Parts
- Remarks
- Number Property
- Throw Statement
- On Error Resume Next
- On Error GoTo 0
- On Error GoTo -1
- Untrapped Errors
- Как перехватить ошибки ADSI
- Урок 13 по VBScript: Конструкция On Error Resume Next
- Оператор On Error (Visual Basic)
- Синтаксис
- Компоненты
- Комментарии
- Свойство Number
- Оператор Throw
- При следующей ошибке возобновление
- При ошибке GoTo 0
- При ошибке goTo -1
- Неисправляемые ошибки
On Error Statement (Visual Basic)
Enables an error-handling routine and specifies the location of the routine within a procedure; can also be used to disable an error-handling routine. The On Error statement is used in unstructured error handling and can be used instead of structured exception handling. Structured exception handling is built into .NET, is generally more efficient, and so is recommended when handling runtime errors in your application.
Without error handling or exception handling, any run-time error that occurs is fatal: an error message is displayed, and execution stops.
The Error keyword is also used in the Error Statement, which is supported for backward compatibility.
Syntax
Parts
Term | Definition |
---|---|
GoTo line | 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. |
GoTo 0 | Disables enabled error handler in the current procedure and resets it to Nothing . |
GoTo -1 | Disables enabled exception in the current procedure and resets it to Nothing . |
Resume Next | Specifies that 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. Use this form rather than On Error GoTo when accessing objects. |
We recommend that you use structured exception handling in your code whenever possible, rather than using unstructured exception handling and the On Error statement. For more information, see Try. Catch. Finally Statement.
An «enabled» error handler is one that is turned on by an On Error statement. An «active» error handler is an enabled handler that is in the process of handling an error.
If an error occurs while an error handler is active (between the occurrence of the error and a Resume , Exit Sub , Exit Function , or Exit Property statement), the current procedure’s error handler cannot handle the error. Control returns to the calling procedure.
If the calling procedure has an enabled error handler, it is activated to handle the error. If the calling procedure’s error handler is also active, control passes back through previous calling procedures until an enabled, but inactive, error handler is found. If no such error handler is found, the error is fatal at the point at which it actually occurred.
Each time the error handler passes control back to a calling procedure, that procedure becomes the current procedure. Once an error is handled by an error handler in any procedure, execution resumes in the current procedure at the point designated by the Resume statement.
An error-handling routine is not a Sub procedure or a Function procedure. It is a section of code marked by a line label or a line number.
Number Property
Error-handling routines rely on the value in the Number property of the Err object to determine the cause of the error. The routine should test or save relevant property values in the Err object before any other error can occur or before a procedure that might cause an error is called. The property values in the Err object reflect only the most recent error. The error message associated with Err.Number is contained in Err.Description .
Throw Statement
An error that is raised with the Err.Raise method sets the Exception property to a newly created instance of the Exception class. In order to support the raising of exceptions of derived exception types, a Throw statement is supported in the language. This takes a single parameter that is the exception instance to be thrown. The following example shows how these features can be used with the existing exception handling support:
Notice that the On Error GoTo statement traps all errors, regardless of the exception class.
On Error Resume Next
On Error Resume Next causes execution to continue with the statement immediately following the statement that caused the run-time error, or with the statement immediately following the most recent call out of the procedure containing the On Error Resume Next statement. This statement allows execution to continue despite a run-time error. You can place the error-handling routine where the error would occur rather than transferring control to another location within the procedure. An On Error Resume Next statement becomes inactive when another procedure is called, so you should execute an On Error Resume Next statement in each called routine if you want inline error handling within that routine.
The On Error Resume Next construct may be preferable to On Error GoTo when handling errors generated during access to other objects. Checking Err after each interaction with an object removes ambiguity about which object was accessed by the code. You can be sure which object placed the error code in Err.Number , as well as which object originally generated the error (the object specified in Err.Source ).
On Error GoTo 0
On Error GoTo 0 disables error handling in the current procedure. It doesn’t specify line 0 as the start of the error-handling code, even if the procedure contains a line numbered 0. Without an On Error GoTo 0 statement, an error handler is automatically disabled when a procedure is exited.
On Error GoTo -1
On Error GoTo -1 disables the exception in the current procedure. It does not specify line -1 as the start of the error-handling code, even if the procedure contains a line numbered -1. Without an On Error GoTo -1 statement, an exception is automatically disabled when a procedure is exited.
To prevent error-handling code from running when no error has occurred, place an Exit Sub , Exit Function , or Exit Property statement immediately before the error-handling routine, as in the following fragment:
Here, the error-handling code follows the Exit Sub statement and precedes the End Sub statement to separate it from the procedure flow. You can place error-handling code anywhere in a procedure.
Untrapped Errors
Untrapped errors in objects are returned to the controlling application when the object is running as an executable file. Within the development environment, untrapped errors are returned to the controlling application only if the proper options are set. See your host application’s documentation for a description of which options should be set during debugging, how to set them, and whether the host can create classes.
If you create an object that accesses other objects, you should try to handle any unhandled errors they pass back. If you cannot, map the error codes in Err.Number to one of your own errors and then pass them back to the caller of your object. You should specify your error by adding your error code to the VbObjectError constant. For example, if your error code is 1052, assign it as follows:
System errors during calls to Windows dynamic-link libraries (DLLs) do not raise exceptions and cannot be trapped with Visual Basic error trapping. When calling DLL functions, you should check each return value for success or failure (according to the API specifications), and in the event of a failure, check the value in the Err object’s LastDLLError property.
Источник
Как перехватить ошибки ADSI
VBScript предоставляет только один из способов перехвата ошибок: встроенную обработку ошибок. Встроенный обработчик ошибок начинается с оператора On Error Resume Next . Так как on Error Resume Next предотвратит остановку выполнения скрипта до конца области, из которой вызывается функция On Error Resume Next , необходимо проверить значение Err в каждой точке после оператора On Error Resume Next , где может возникнуть ошибка. В следующем примере показана встроенная обработка ошибок в скрипте ADSI:
После каждого расположения, в котором сценарий, скорее всего, возникнет ошибка, существует оператор If Err . Объект Err содержит код ошибки последней ошибки, возниквшей во время выполнения скрипта; Если ошибка не произошла, значение Err всегда будет равно нулю (0). В предыдущем примере ошибка приведет к переходу к подпрограмме AdsiErr , которая проверяет значение Err.Number на наличие ожидаемых ошибок. Вместо того, чтобы умирать с сообщением о зашифрованной ошибке, сценарий даст несколько лучшее объяснение того, почему он остановился.
Помните, что в области, в которой вызывается функция On Error Resume Next , любая ошибка, возникающая после вызова on Error Resume Next , будет игнорироваться. Это на самом деле может усложнить отладку скрипта, если вы забыли проверить значение Err в соответствующих расположениях. Где бы вы ни ожидали, что ошибка, скорее всего, проверьте значение Err.
(При первоначальной отладке скрипта может потребоваться просто разрешить скрипту остановить его выполнение и отобразить номер строки об ошибке, а затем добавить обработчики ошибок после правильного базового потока программы.)
Источник
Урок 13 по VBScript: Конструкция On Error Resume Next
В этой статье мы рассмотри обработку ошибок в языке VBScript, а именно объект Err , конструкцию On Error Resume Next и On Error Goto 0 . Конструкция VBScript On Error Resume Next включает обработку ошибок, а On Error Goto 0 отменяет их обработку.
Объект Err не нуждается в предварительном объявлении, и доступен всегда, давайте рассмотри его методы и свойства:
- Description — данное свойство содержит описание ошибки.
- Number — содержит целое число – номер ошибки. Если значение свойства Number ровно нулю – значит, ошибка отсутствует.
- Source — свойство содержит название приложения, в котором возникла ошибка.
Методы
Clear – полная очистка информации об ошибке. Стоит обратить внимание, что информация об ошибке автоматически очищается при выполнении операторов On Error Resume Next , Exit Sub и Exit Function .
Raise(number, [source, description]) – данный метод позволяет генерировать собственную ошибку времени выполнения. Видим, что тут можно задать параметры, аналогичные по своей принадлежности свойствам самого объекта Err. Видим, что тут является обязательным только первый параметр.
Хорошо, теперь давайте рассмотри четыре примера на языке vbscript.
‘——————————————————————————‘ vbscript on error resume next’ произойдет вычисление только для первых 3 значений’ on_error_1.vbs’——————————————————————————Option Explicit’включаем обработку ошибокOn Error Resume Nextdim MyArr(8), icount, Result, msgErr, msg ‘ заполняем массив MyArr(0) = 5 MyArr(1) = -3 MyArr(2) = 15 MyArr(3) = 0 MyArr(4) = 2 MyArr(5) = 6 MyArr(6) = 0 MyArr(7) = -1 icount=0msg=»»msgErr = «Ошибка. » & vbCrLf’циклично делим число 15 на каждый элемент массиваDo result=15/MyArr(icount) If Err.Number <> 0 ThenmsgErr=msgErr & «Код ошибки: » & Err.Number & vbCrLf &_ «Описание: » & Err.Description & vbCrLf &_ «Приложение: » & Err.Source & vbCrLf result = msgErr msgErr=»» end if icount = icount+1 msg=msg & Result & vbCrLf & vbCrLfLoop While (icount Пример 2
‘——————————————————————————‘ vbscript on error resume next’ Вычисления не произойдут’ on_error_2.vbs’——————————————————————————Option Explicit’включаем обработку ошибокOn Error Resume Nextdim MyArr(8), icount, Result, msgErr, msg ‘ заполняем массив MyArr(0) = 5 MyArr(1) = -3 MyArr(2) = 15 MyArr(3) = 0 MyArr(4) = 2 MyArr(5) = 6 MyArr(6) = 0 MyArr(7) = -1 icount=0msg=»»msgErr = «Ошибка. » & vbCrLf’циклично делим число 15 на каждый элемент массиваDo result=15/MyArr(icount) If Err.Number <> 0 ThenmsgErr=msgErr + «Код ошибки: » & Err.Number & vbCrLf &_ «Описание: » & Err.Description & vbCrLf &_ «Приложение: » & Err.Source & vbCrLf result = msgErr msgErr=»» ‘ Отменяем обработку ошибок. On Error Goto 0 end if icount = icount+1 msg=msg & result & vbCrLf & vbCrLfLoop While (icount Пример 3
‘——————————————————————————‘ on error resume next vbscript’ Правильный подход обработки ошибок’ on_error_3.vbs’——————————————————————————Option Explicit’включаем обработку ошибокOn Error Resume Nextdim MyArr(8), icount, Result, msgErr, msg ‘ заполняем массив MyArr(0) = 5 MyArr(1) = -3 MyArr(2) = 15 MyArr(3) = 0 MyArr(4) = 2 MyArr(5) = 6 MyArr(6) = 0 MyArr(7) = -1 icount=0msg=»»msgErr = «Ошибка. » & vbCrLf’циклично делим число 15 на каждый элемент массиваDo ‘Очищаем информацию об ошибке Err.Clear result=15/MyArr(icount) If Err.Number <> 0 ThenmsgErr=msgErr + «Код ошибки: » & Err.Number & vbCrLf &_ «Описание: » & Err.Description & vbCrLf &_ «Приложение: » & Err.Source & vbCrLf result = msgErr msgErr=»» end if icount = icount+1 msg=msg & result & vbCrLf & vbCrLfLoop While (icount Err.Clear , который очищает информацию о предыдущих ошибках.
Ну и наконец четвертый пример, тут мы генерируем собственное описание ошибки.
Источник
Оператор On Error (Visual Basic)
Включает подпрограмму обработки ошибок и указывает расположение подпрограммы в процедуре; также можно использовать для отключения подпрограммы обработки ошибок. Оператор On Error используется в неструктурированной обработке ошибок и может использоваться вместо структурированной обработки исключений. Структурированная обработка исключений встроена в .NET, как правило, более эффективна и поэтому рекомендуется при обработке ошибок среды выполнения в приложении.
Без обработки ошибок или обработки исключений любая возникающая ошибка во время выполнения неустранима: отображается сообщение об ошибке и выполнение останавливается.
Ключевое Error слово также используется в инструкции error, которая поддерживается для обеспечения обратной совместимости.
Синтаксис
Компоненты
Термин | Определение |
---|---|
GoTo Линии | Включает подпрограмму обработки ошибок, которая начинается со строки, указанной в требуемом аргументе строки . Аргумент строки — это любая метка строки или номер строки. При возникновении ошибки во время выполнения управление ветвляется в указанную строку, делая обработчик ошибок активным. Указанная строка должна находиться в той же процедуре, что и On Error инструкция , иначе возникнет ошибка во время компиляции. |
GoTo 0 | Отключает включенный обработчик ошибок в текущей процедуре и сбрасывает его до Nothing . |
GoTo -1 | Отключает включенного исключения в текущей процедуре и сбрасывает его до Nothing . |
Resume Next | Указывает, что при возникновении ошибки во время выполнения управление переходит к инструкции сразу после инструкции, в которой произошла ошибка, и выполнение продолжается с этой точки. Используйте эту форму, а не On Error GoTo при доступе к объектам. |
Комментарии
Мы рекомендуем по возможности использовать структурированную обработку исключений в коде, а не не неструктурированную обработку исключений и инструкцию On Error . Дополнительные сведения см. в разделе Оператор Try. Catch. Finally.
Обработчик ошибок «включен» — это обработчик, который включается оператором On Error . «Активный» обработчик ошибок — это включенный обработчик, который находится в процессе обработки ошибки.
Если ошибка возникает, когда обработчик ошибок активен (между возникновением ошибки и оператором Resume , Exit Sub , Exit Function или Exit Property ), обработчик ошибок текущей процедуры не сможет обработать ошибку. Элемент управления возвращается в вызывающую процедуру.
Если вызывающая процедура имеет включенный обработчик ошибок, она активируется для обработки ошибки. Если обработчик ошибок вызывающей процедуры также активен, управление передается обратно через предыдущие вызывающие процедуры до тех пор, пока не будет найден включенный, но неактивный обработчик ошибок. Если такой обработчик ошибок не найден, ошибка становится неустранимой в точке, в которой она действительно произошла.
Каждый раз, когда обработчик ошибок передает управление вызывающей процедуре, эта процедура становится текущей процедурой. После обработки ошибки обработчиком ошибок в любой процедуре выполнение возобновляется в текущей процедуре в точке, назначенной оператором Resume .
Подпрограмма обработки ошибок не является процедурой Sub или процедурой Function . Это раздел кода, помеченный меткой строки или номером строки.
Свойство Number
Подпрограммы обработки ошибок используют значение в свойстве Number Err объекта для определения причины ошибки. Подпрограмма должна проверять или сохранять соответствующие значения свойств в объекте Err до возникновения любой другой ошибки или перед вызовом процедуры, которая может вызвать ошибку. Значения свойств в объекте Err отражают только самую последнюю ошибку. Сообщение об ошибке, связанное с Err.Number , содержится в Err.Description .
Оператор Throw
Ошибка, возникающая при Err.Raise использовании метода , задает для Exception свойства только что созданный экземпляр Exception класса . Для поддержки создания исключений производных типов исключений Throw в языке поддерживается оператор . Для этого требуется один параметр, который является экземпляром исключения, который должен быть создан. В следующем примере показано, как эти функции можно использовать с существующей поддержкой обработки исключений:
Обратите внимание, что On Error GoTo оператор перехватывает все ошибки, независимо от класса исключения.
При следующей ошибке возобновление
On Error Resume Next приводит к продолжению выполнения с оператором сразу после оператора, вызвавшего ошибку во время выполнения, или оператором сразу после последнего вызова процедуры, содержащей инструкцию On Error Resume Next . Эта инструкция позволяет продолжить выполнение, несмотря на ошибку во время выполнения. Вы можете поместить подпрограмму обработки ошибок в место возникновения ошибки, а не передавать управление в другое расположение в процедуре. Оператор On Error Resume Next становится неактивным при вызове другой процедуры, поэтому следует выполнить инструкцию в каждой On Error Resume Next из вызываемой подпрограммы, если требуется встроенная обработка ошибок в рамках этой процедуры.
Конструкция On Error Resume Next может быть предпочтительнее, чем On Error GoTo при обработке ошибок, создаваемых при доступе к другим объектам. Проверка Err после каждого взаимодействия с объектом устраняет неоднозначность относительно того, к какому объекту был доступ из кода. Вы можете быть уверены, какой объект поместил код ошибки в Err.Number , а также какой объект изначально создал ошибку (объект, указанный в Err.Source ).
При ошибке GoTo 0
On Error GoTo 0 отключает обработку ошибок в текущей процедуре. Строка 0 не указывается в качестве начала кода обработки ошибок, даже если процедура содержит строку с нумеровкой 0. On Error GoTo 0 Без оператора обработчик ошибок автоматически отключается при завершении процедуры.
При ошибке goTo -1
On Error GoTo -1 отключает исключение в текущей процедуре. Строка -1 не указывается в качестве начала кода обработки ошибок, даже если процедура содержит строку с нумеровкой -1. On Error GoTo -1 Без оператора исключение автоматически отключается при завершении процедуры.
Чтобы предотвратить выполнение кода обработки ошибок при отсутствии ошибки, поместите инструкцию Exit Sub , Exit Function или Exit Property непосредственно перед подпрограммой обработки ошибок, как показано в следующем фрагменте:
Здесь код обработки ошибок следует за оператором Exit Sub и предшествует оператору End Sub , чтобы отделить его от потока процедуры. Код обработки ошибок можно разместить в любом месте процедуры.
Неисправляемые ошибки
Необрезанные ошибки в объектах возвращаются управляющее приложение, когда объект выполняется как исполняемый файл. В среде разработки неиспространенные ошибки возвращаются в управляющее приложение, только если заданы правильные параметры. Сведения о том, какие параметры следует задать во время отладки, как их задать и может ли узел создавать классы, см. в документации ведущего приложения.
При создании объекта, который обращается к другим объектам, следует попытаться обработать все необработанные ошибки, которые они передают обратно. Если вы не можете, сопоставьте коды ошибок в Err.Number с одной из собственных ошибок, а затем передайте их обратно вызывающему объекту. Необходимо указать ошибку, добавив код ошибки в константу VbObjectError . Например, если код ошибки равен 1052, назначьте его следующим образом:
Системные ошибки во время вызовов библиотек динамической компоновки Windows (DLL) не вызывают исключений и не могут быть захвачены с помощью перехвата ошибок Visual Basic. При вызове функций DLL следует проверять каждое возвращаемое значение на успешность или сбой (в соответствии со спецификациями API), а в случае сбоя — значение в Err свойстве LastDLLError объекта .
Источник
Error Handling
Error handling does not involve finding
errors in your scripts. Instead, use error handling techniques to
allow your program to continue executing even though a potentially
fatal error has occurred. Ordinarily, all runtime errors that are
generated by the VBScript engine are fatal, since execution of the
current script is halted when the error occurs. Error handling allows
you to inform the user of the problem and either halt execution of
the program or, if it is prudent, continue executing the program.
The On Error Resume Next Statement
There are two main elements to error handling in VBScript. The first
is the On
Error
statement,
which informs the VBScript engine of your intention to handle errors
yourself, rather than to allow the VBScript engine to display a
typically uninformative error message and halt the program. This is
done by inserting a statement like the following at the start of a
procedure:
On Error Resume Next
This tells the VBScript engine that, should an error occur, you want
it to continue executing the program starting with the line of code
which directly follows the line in which the error occurred. For
example, in the simple WSH script:
On Error Resume Next x = 10 y = 0 z = x / y Alert z
a “Cannot divide by Zero” error is generated on the
fourth line of code because the value of y
is 0. But because you’ve placed the On Error
statement in line 1, program execution continues with line 5. The
problem with this is that when an error is generated, the user is
unaware of it; the only indication that an error has occurred is the
blank Alert box (from line 5) that’s displayed for the user.
Tip
A particular On
Error
statement
is valid until another On
Error
statement in the line of execution is encountered. This means that if
Function A contains an On Error
statement, and
Function A calls Function B, but Function B does not contain an
On
Error
statement, the error
handling from Function A is still valid. Therefore, if an error
occurs in Function B, it is the On
Error
statement in Function A that handles the
error; in other words, when an error is encountered in Function B,
program flow will immediately jump to the line of code that followed
the call to Function B in Function A. When Function A completes
execution, the On
Error
statement it contains also goes out of scope. This means that, if the
routine that called Function A did not include an
On
Error
statement, no error
handling is in place.
This is where the second element of VBScript’s error handling
comes in. VBScript includes an error object, named Err, which, when
used in conjunction with On
Error
Resume
Next
, adds much more functionality to error
handling, allowing you to build robust programs and relatively
sophisticated error handling routines.
The Err Object
The Err object is part of the VBScript
language and contains information about the last error to occur. By
checking the properties of the Err object after a particular piece of
code has executed, you can determine whether an error has occurred
and, if so, which one. You can then decide what to do about the error
—you can, for instance, continue execution regardless of the
error, or you can halt execution of the program. The main point here
is that error handling using On Error
and the Err
object puts you in control of errors, rather than allowing an error
to take control of the program (and bring it to a grinding halt). To
see how the Err object works and how you can use it within an error
handling regimen within your program, let’s begin by taking a
look at its properties and methods.
Err object properties
Like all
object properties, the properties of the Err object can be accessed
by using the name of the object, Err, the
dot (or period) delimiter, and the
property name. The Err object supports the following properties:
- Number
-
The Number property is an integer value that
contains an error code value between
and 65535, representing the last error. If the value of
Err.Number
is 0, no error has occurred.
The line of code like the following, then, can be used to determine
if an error has occurred:If Err.Number <> 0 Then
Although the properties of the Err object provide information on the
last error to occur in a script, they do not do so permanently. All
the Err object properties, including the Number property, are set
either to zero or to zero-length strings after an End Sub, End
Function, Exit Sub or Exit Function statement. In addition, though,
you can explicitly resetErr.Number
to
zero after an error by calling the Err object’s
Clear method. The WSH script in Example 4.8 illustrates the importance of resetting the
Err
object after an error occurs.Example 4-8. Failing to Reset the Err Object
Dim x, y ,z On Error Resume Next x = 10 y = 0 z = x / y If Err.Number <> 0 Then MsgBox "There's been an error #1" Else MsgBox z End IF z = x * y If Err.Number <> 0 Then MsgBox "There's been an error #2" Else MsgBox z End If End Sub
The division by zero on the fifth line of the script in Example 4.8 generates an error. Therefore, the conditional
statement on line 6 evaluates toTrue
, and an
error dialog is displayed. Program flow then continues at line 12.
Line 12 is a perfectly valid assignment statement that always
executes without error, but the Err.Number property still contains
the error number from the previous error in line 5. As a result, the
conditional statement on line 13 evaluates to
True
, and a second error dialog is displayed.
Despite the two error messages, though, there’s only been a
single error in the script.The Err object can be reset by using the Clear method (which is
discussed in the next Section 4.2.2.2). - Description
-
The Description property contains a string
that describes the last error that occurred. You can use the
Description property to build your own message box alerting the user
to an error, as the WSH script in Example 4.9 shows.
Example 4-9. Using the Description Property to Display Error Information
Dim x, y ,z On Error Resume Next x = 10 y = 0 z = x / y If Err.Number <> 0 Then MsgBox "Error number " & Err.Number & ", " & _ Err.Description & ", has occurred" Err.Clear Else MsgBox z End If z = x * y If Err.Number <> 0 Then MsgBox "Error No:" & Err.Number & " - " & _ Err.Description & " has occurred" Err.Clear Else Alert z End If
- Source
-
The Source property contains a string
expression that indicates the class name of the object or application
that generated the error. You can use the Source property to provide
users with additional information about an error; in particular,
about where an error occurred.The value of the Source property for all errors generated within
scripted code is simply “Microsoft VBScript runtime
error.” This is true of all VBScript scripts, whether
they’re written for Active Server Pages, Windows Script Host,
Internet Explorer, or Outlook forms. Obviously, this makes the Source
property less than useful in many cases. However, you can assign a
value to the Source property in your own error handling routines to
indicate the name of the function or procedure in which an error
occurred. In addition, the primary use of the Source property is to
signal an error that is generated by some other object, like an OLE
automation server (like Microsoft Excel or Microsoft Word) or a COM
component.
Err object methods
The two
methods of the Err object allow you to raise or clear an error, in
the process simultaneously changing the values of one or more Err
object properties. The two methods are:
- Raise
-
The Err.
Raise method allows you to generate a
runtime error. Its syntax is:[1]where
ErrorNumber
is the numeric code for
the error you’d like to generate. At first glance, generating
an error within your script may seem like a very odd thing to want to
do! However, there are times, particularly when you are creating
large, complex scripts, that you need to test the effect a particular
error will have on your script. The easiest way to do this is to
generate the error using the Err.Raise method and providing the error
code to theErrorNumber
parameter, then
sit back and note how your error handling routine copes with the
error, what the consequences of the error are, and what side effects
the error has, if any. The client-side script in Example 4.10, for instance, allows the user to enter a
number into a text box, which is passed as the error code value to
the Err.Raise method. If the value of the error code is nonzero, an
Alert box opens that displays the error code and its corresponding
description. Figure 4.6, for instance, shows the
Alert box that is displayed when the user enters a value of 13 into
the text box.Example 4-10. Calling the Err.Raise Method
<HTML> <HEAD> <TITLE>Using the Err Object</TITLE> <SCRIPT LANGUAGE="vbscript"> Sub cmdButton1_OnClick On Error Resume Next errN = Document.frm1.errcode.value Err.Raise(errN) If Err.Number <> 0 Then Alert "Error No:" & Err.Number & " - " & Err.Description Err.Number = 0 End If End Sub </SCRIPT> </HEAD> <BODY BGCOLOR="white"> <CENTER> <H2>Generating an Error</H2> <P> <FORM NAME="frm1"> Enter an Error Code <INPUT TYPE="text" NAME="errcode"> <INPUT TYPE="button" NAME="cmdButton1" VALUE="Generate Error"> </CENTER> </BODY> </HTML>
At present there is no definitive list of VBScript runtime error
codes available from Microsoft. Table 4.1 lists a
few of the most common
runtime
errors.Tip
An Error Code Generator
(ERRCODES1.HTML
,
ERRCODES1.ASP
, and
ERRCODES1.VBS
), which allows you to generate a
complete list of current VBScript error codes, can be found on the
O’Reilly Visual Basic web site athttp://vb.oreilly.com.
Table 4-1. Some Common VBScript Error Codes
Error Number
Description
5
Invalid procedure call
6
Overflow
7
Out of memory
9
Subscript out of range
11
Division by zero
13
Type mismatch
Figure 4-6. Generating a Type mismatch error at runtime
- Clear
-
The Clear method clears the information
that the Err object is storing about the previous error; it takes no
parameters. It sets the values of
Err.Number
to
and the Err object’s Source and Description properties to
a
nullstring.
Get VBScript in a Nutshell now with the O’Reilly learning platform.
O’Reilly members experience live online training, plus books, videos, and digital content from nearly 200 publishers.
Учебник VBScript №1: Обзор переменных VBScript
Учебник VBScript №2: Условные операторы и циклы VBScript
Учебник VBScript №3: Процедуры VBScript
Учебник VBScript №4: Обработка ошибок VBScript и выполнение VBScript
Учебник VBScript №5: Строковые функции VBScript
VУчебник BScript №6: Функции даты VBScript
Учебник VBScript №7: Функции времени VBScript
Учебник VBScript №8: Функции массива VBScript
В этом руководстве по VBScript мы узнаем о процедурах VBScript, включая функции VBScript и подпроцедуры VBScript. Кроме того, в этом руководстве мы узнаем об обработке ошибок VBScript и подходах к выполнению VBScript.
Учебное пособие по VBScript #3: Процедуры VBScript
Процедуры VBScript:
Процедуры VBScript — это блок операторов, заключенный в особый ключевые слова для выполнения определенных действий. Процедуры VBScript могут принимать входные значения и возвращать выходное значение. Здесь входные значения представлены как аргументы.
Процедуры VBScript в основном используются для профессиональной организации кода для повторного использования кода и лучшего обслуживания. Предположим, что в большой программе или кодах некоторая основная арифметическая операция выполняется многократно. Итак, если есть изменение в этой операции, нам нужно изменить все места, где она используется. Вместо того, чтобы делать то же самое, если мы напишем одну процедуру VBScript для той же операции и будем использовать ссылку на нее во всех местах, тогда нам нужно будет изменить код в одном месте. Таким образом, мы можем сократить усилия по обслуживанию скриптов.
На процедуры VBScript можно ссылаться с помощью ключевого слова «Call». Также VBScript позволяет вызывать любую процедуру без использования этого ключевого слова.
Преимущества процедур VBScript:
· Возможность повторного использования кода.
· Снижение усилий по обслуживанию скриптов.
· Лучшая читаемость кодов.
· Лучшая организация кодов.
Типы процедур VBScript:
Процедуры VBScript принимают входные данные, обрабатывают их и выполняют некоторые операции в зависимости от типов процедур. В целом процедуры VBScript подразделяются на два типа, которые указаны ниже:
· Подпроцедура VBScript
· Процедура функции VBScript
Подпроцедуры VBScript:
Подпроцедуры VBScript группируют несколько операторов, не возвращая никаких выходных значений. Он может принимать входные данные в качестве аргументов. Этот тип процедур должен начинаться и заканчиваться ключевыми словами Sub и End Sub соответственно. Процедуры VBScript Sub могут принимать аргументы, но не возвращают никаких выходных значений.
Пример. Здесь мы напишем небольшую подпроцедуру vbscript, которая принимает аргумент как предупреждающие сообщения и отображает его во всплывающем окне сообщения.
‘Call the vbscript sub procedure
Call displayAlert(“This is an example of vbscript sub procedure”)
Sub displayAlert(alertMessage)
Msgbox alertMessage
End Sub
Функция VBScript:
Если мы хотим выполнить блок операторов с возвратом каких-либо выходных значений, нам нужно использовать функции VBScript. В начале функций VBScript нам нужно использовать ключевое слово «Function» для определения имени функции, а в конце используется ключевое слово «End Function». Функции VBScript могут принимать как аргументы, так и возвращаемые значения. Чтобы вернуть значение из функции, значение должно быть присвоено имени функции перед закрытием функции.
Пример. В этом примере мы рассчитаем площадь круга с помощью функции vbscript. Здесь радиус будет передан в качестве аргумента функции VBScript и вернет область в качестве вывода.
Dim calcArea 'Вызов функции vbscript calcArea = calcCircleArea(7) msgbox "Площадь круга равна" & функция calcArea calcCircleArea(radius) dim pi, a pi = 22/7 a = pi*radius*radius calcCircleArea = a End Function
Output(Message Box): The area of the circle is 154
Аргументы ByRef и ByVal в процедурах VBScript:
Аргумент ByRef — Чтобы сохранить изменения, внесенные в аргумент, даже после вызова процедуры VBScript, мы должны отправить аргумент по ссылке (ByRef). Если при передаче аргументов в процедуры VBScript ничего не указано, по умолчанию он обрабатывается как переданный по ссылке. Ключевое слово ByRef используется для передачи аргумента по ссылке.
Пример ByRef — см. Код ниже, здесь аргумент Counter был передан в процедуру по ссылке. Первоначально он определен со значением четыре, а в процедуре он увеличивается на 1. Поскольку аргумент был передан по ссылке, значение аргумента будет равно пяти после вызова функции.
Function incrementCounter(ByRef Counter)
Counter = Counter +1
incrementCounter = Counter
End Function
Dim x
myCounter=4
call incrementCounter(myCounter)
msgbox myCounter
Output => 5
ByVal Аргумент — Когда аргумент передается по значению (ByVal), любые изменения, внесенные в значение аргумента в функциях VBScript, не сохранятся после вызова функции. Ключевое слово ByVal используется для передачи аргумента по значению.
Пример ByVal — см. Код ниже, здесь аргумент Counter был передан в процедуру по значению. Первоначально он определен со значением четыре, а в процедуре он увеличивается на 1. Поскольку аргумент был передан по значению, значение аргумента останется четвертым после вызова функции.
Function incrementCounter(ByVal Counter)
Counter = Counter +1
incrementCounter = Counter
End Function
Dim x
myCounter=4
call incrementCounter(myCounter)
msgbox myCounter
Output => 4
Учебное пособие по VBScript #4: Обработка ошибок VBScript и выполнение VBScript
Ошибки VBScript:
Ошибки VBScript — это не что иное, как необработанные события, которые не обрабатываются с помощью кода. В сценариях vb, если встречаются какие-либо события, которые не обрабатываются кодами, они рассматриваются как ошибки VBScript.
Типы ошибок VBScript:
Ниже перечислены различные типы ошибок VBScript.
Ошибки синтаксиса — Основными причинами этого типа ошибок VBScript являются неправильная структура скрипта, типографические ошибки, неправильное написание ключевых слов, синтаксические ошибки. Если синтаксические ошибки существуют, сценарий вообще не будет выполнен. Он появляется во время компиляции скрипта.
Логические ошибки — Этот тип ошибок VBScript возникает из-за некоторых неожиданных событий, таких как сбой преобразования числа или даты из-за несоответствующих данных. Он появляется во время выполнения тестовых скриптов.
Обработка ошибок VBScript:
Невозможно обработать все неожиданные ошибки VBScript с помощью кодирования. Итак, обработка ошибок VBScript — это первоочередная задача. В первую очередь, есть один подход к обработке ошибки VBScript в сценариях. Этот подход представляет собой комбинацию использования операторов «При ошибке возобновить следующий» и свойства объекта Err.
При ошибке Возобновить следующие операторы:
Он использовал операторы On-Error-Resume-Next; исключение можно обработать частично. При таком подходе блок тестового сценария должен запускаться с помощью операторов «On Error Resume Next». Это означает, что в случае какой-либо ошибки выполнение будет пропущено с текущего шага и перейдет к следующему шагу. После этого, проверив ошибку, мы сможем обрабатывать исключения. Важные ключевые слова —
· При ошибке возобновить следующий — В случае ошибки VBScript не выдаст сообщение об ошибке; вместо этого выполнение перейдет к следующему шагу.
· При ошибке Перейти к 0 — Он будет работать в обратном порядке по сравнению с указанным выше ключевым словом. Итак, после выполнения этого шага VBScript будет выдавать ошибки в случае каких-либо исключений.
· Ошибка. Описание — В нем хранится описание ошибки.
· Error.Number — Он содержит номер ошибки. Для успеха значение равно нулю.
· Error.Clear — Он сбрасывает объект ошибки.
При ошибке Возобновить Далее 'оператор Vbscript 1 'оператор Vbscript 1 . . . . . Если error.number <> 0, то 'Проверка на наличие ошибки'..Обработать ошибку Else 'Условие успеха ничего обрабатывать не нужно Error.Clear End If On Error Goto 0
Подход к выполнению VBScript:
Существуют различные способы выполнения сценариев VBScripts. Наиболее часто используемые подходы —
- Выполнить VBScript через файл .vbs
- Выполнять VBScript как часть веб-разработки HTML
Выполнить VBScript через файл .vbs: Шаги для выполнения vbscript через файл .vbs:
- Запишите коды VBScript в простой плоский файл. Для создания файла можно использовать любой редактор, например, блокнот, Note Pad ++, Edit Plus и т. Д.
- Сохраните файл с расширением .vbs.
- Запустите файл, дважды щелкнув по нему.
- Тот же файл можно запустить из командной строки, используя полный путь к файлу. Команда для выполнения файла vbs: WScript » ».
В этом руководстве по vbscript мы используем этот подход для запуска всех демонстрационных сценариев vbscript.
Выполните VBScript как часть веб-страницы: В этом подходе нам нужно написать коды VBScript с тегом in in the web page. The syntax will be looks like below –
<script type="text/vbscript">
- Vbscript statements …
</script>
Этот подход используется при разработке веб-страниц с использованием классического ASP. Также то же самое можно использовать в других технологиях, таких как PHP, JSP и т. Д.
Инструменты использует VBScript: Основные инструменты, поддерживающие сценарии vbscripts: UFT, Excel Macro, Visual Basic, Classic ASP (сценарии на стороне клиента).
Вывод:
В этой статье о VBScript мы узнали о процедурах VBScript и обработке ошибок VBScript с помощью этого руководства. Мы надеемся, что это руководство очень помогло вам освежить в памяти основы написания сценариев VB. Чтобы получить дополнительную информацию о VBScripting, нажмите здесь.
Активизирует подпрограмму обработки ошибок и указывает положение подпрограммы в процедуре; используется также для отключения подпрограммы обработки ошибок.
- On Error GoTo строка — Активизирует подпрограмму обработки ошибок, начало которой определяется обязательным аргументом строка, значением которого может быть любая метка строки или номер строки. Если возвращается ошибка выполнения, управление передается на указанную строку и запускается обработчик ошибок. Аргумент строка должен определять строку в той же процедуре, в которой находится инструкция On Error; в противном случае возникает ошибка компиляции.
- On Error Resume Next — Указывает, что возникновение ошибки выполнения приводит к передаче управления на инструкцию, непосредственно следующую за инструкцией, при выполнении которой возникла ошибка. Рекомендуется при доступе к объектам использовать эту форму инструкции, а не On Error GoTo.
- On Error GoTo 0 — Отключает любой активизированный обработчик ошибок в текущей процедуре.
Замечания
Если не выполнена инструкция On Error, то любая ошибка выполнения является фатальной; это означает, что выводится сообщение об ошибке и выполнение программы прекращается.
«Включенным» обработчиком ошибок называют подпрограмму, которая указана в инструкции On Error; «активным» обработчиком ошибок является включенный обработчик ошибок, который обрабатывает текущую ошибку. Если ошибка возникает в самом обработчике ошибок (в промежутке между возникновением ошибки и выполнением инструкции Resume, Exit Sub, Exit Function или Exit Property), то обработчик ошибок, определенный в текущей процедуре, не может обработать ошибку. Управление в этом случае возвращается в вызывающую процедуру; если в вызывающей процедуре включен обработчик ошибок, то обработка ошибки передается ему. Если этот обработчик ошибок является в данный момент активным, т.е. уже обрабатывает ошибку, то управление снова передается назад в вызывающую процедуру и т.д. до тех пор, пока не будет найден включенный, но не активный обработчик ошибок. Если включенный, но неактивный обработчик ошибок найден не будет, ошибка становится фатальной в том месте программы, в котором она впервые возникла. При каждой передаче управления обработчиком ошибок в вызывающую процедуру эта процедура становится текущей. После завершения обработки ошибки обработчиком в любой процедуре возобновляется выполнение текущей процедуры с той ее части, которая указана в инструкции Resume.
Подпрограмма обработки ошибок не может быть процедурой Sub или Function. Эта подпрограмма должна быть частью программы, которая отмечается с помощью метки строки или номера строки.
Для определения причины ошибки в подпрограммах обработки ошибок используют значение свойства Number объекта Err. Необходимо обеспечить в подпрограммах обработки ошибок проверку или сохранение существенных значений свойств объекта Err перед тем, как может возникнуть новая ошибка или перед вызовом процедуры, в которой может возникнуть новая ошибка. Значения свойств объекта Err описывают последнюю ошибку. Текст сообщения об ошибке, соответствующего коду ошибки Err.Number содержится в свойстве Err.Description.
Конструкция On Error Resume Next задает продолжение выполнения с инструкции, непосредственно следующей за инструкцией, которая привела к ошибке выполнения, или с инструкции, непосредственно следующей за вызывающей инструкцией в процедуре, содержащей конструкцию On Error Resume Next. Это позволяет продолжить исполнение программы несмотря на ошибку выполнения. Это позволяет также встроить подпрограмму обработки ошибок в процедуру, а не передавать управление в другую часть процедуры. Конструкция On Error Resume Next становится неактивной при вызове новой процедуры, поэтому для внутренней обработки ошибок необходимо выполнять инструкцию On Error Resume Next в каждой вызываемой процедуре.
При обработке ошибок, возникающих при доступе к другим объектам, рекомендуется использовать конструкцию On Error Resume Next, а не конструкцию On Error GoTo. Проверка объекта Err после каждого взаимодействия с другим объектом позволяет устранить неопределенность в том, при доступе к какому объекту возникла ошибка. Это позволяет всегда точно знать, какой объект поместил значение кода ошибки в свойство Err.Number, а также в каком объекте возникла ошибка (эта информация содержится в свойстве Err.Source).
Конструкция On Error GoTo 0 отключает обработку ошибок в текущей процедуре. Эта конструкция не задает переход на строку 0 для обработки ошибок, даже если в процедуре имеется строка с номером 0. Если инструкция On Error GoTo 0 не выполнялась, то обработчик автоматически отключается при выходе из процедуры.
Для того, чтобы предотвратить выполнение программы обработки ошибок в тех случаях, когда ошибка не возникла, следует помещать соответствующую инструкцию Exit Sub, Exit Function или Exit Property сразу после подпрограммы обработки ошибки, как в следующем примере:
Sub InitializeMatrix(Var1, Var2, Var3, Var4) On Error GoTo ОбработкаОшибок . . . Exit Sub ОбработкаОшибок: . . . Resume Next End Sub
В этом примере программа обработки ошибок помещена между инструкциями Exit Sub и End Sub, что позволяет отделить ее от части программы, соответствующей нормальному выполнению процедуры. Программу обработки ошибок можно разместить в любом месте процедуры.
Ошибки, которые не были перехвачены, возвращаются в управляющее приложение, если объект был запущен как исполняемый файл. В среде разработчика такие ошибки возвращаются в управляющее приложение только при указании соответствующих параметров. За описанием необходимых значений этих параметров и способов их задания следует обращаться к документации главного приложения. Там же следует проверить, позволяет ли главное приложение создавать классы.
Err.Number = vbObjectError + 1052
Системные ошибки при вызовах библиотек динамической компоновки (DLL) не приводят к возникновению исключений и не перехватываются средствами Visual Basic. При вызове функций из библиотек DLL необходимо проверять, успешно ли возвращается каждое значение (согласно спецификациям API), и в случае неудачи проверять значение свойства LastDLLError объекта Err.
Пример
В начале этой программы инструкция On Error GoTo определяет положение подпрограммы обработки ошибок в процедуре. В данном примере попытка удалить открытый файл приводит к возникновению ошибки с кодом 55. Ошибка обрабатывается в подпрограмме, после чего управление возвращается инструкции, которая привела к возникновению ошибки. Инструкция On Error GoTo 0 отключает перехват ошибок. После этого инструкция On Error Resume Next задает отложенный перехват ошибок, что позволяет точно определить, в каком контексте возникла ошибка, генерируемая в следующей инструкции. Следует отметить, что после обработки ошибки вызывается метод Err.Clear для сброса значений свойств объекта Err.
Sub OnErrorStatementDemo() On Error GoTo ErrorHandler ' Включаем программу обработки ' ошибок. Open "TESTFILE" For Output As #1 ' Открываем файл. Kill "TESTFILE" ' Попытка удалить открытый ' файл. On Error Goto 0 ' Отключаем перехват ошибок. On Error Resume Next ' Откладываем перехват ошибок. ObjectRef = GetObject("MyWord.Basic") ' Запускаем несуществующий ' объект, а затем проверяем ' ошибку механизма управления ' программируемыми объектами. If Err.Number = 440 Or Err.Number = 432 Then ' Выводим сообщение для пользователя и очищаем объект Err. Msg = "Ошибка при попытке открыть программируемый объект!" MsgBox Msg, , "Проверка отложенной ошибки" Err.Clear ' Очищаем поля объекта Err. End If Exit Sub ' Выходим из процедуры, чтобы ' не попасть в обработчик. ErrorHandler: ' Обработчик ошибок. Select Case Err.Number ' Определяем код ошибки. Case 55 ' "Ошибка "Файл уже открыт". Close #1 ' Закрываем открытый файл. Case Else ' Здесь размещаются инструкции для обработки других ошибок... End Select Resume ' Возобновляем выполнение ' со строки, вызвавшей ошибку. End Sub