Ошибка в операторе On Error - PullRequest
4 голосов
/ 27 июня 2011

Я не являюсь разработчиком VBScript.Но как это обычно бывает, я должен написать небольшой скрипт, чтобы что-то проверитьОн открывает Excel, что-то пишет и закрывает.Но дело не в этом.Дело в том, что мне не удается написать код для обработки ошибок.Этот скрипт:

Sub Work()
On Error GoTo ErrMyErrorHandler
Dim objExcelApp
Dim wb
Dim ws

Set objExcelApp = CreateObject("Excel.Application")
Set wb = objExcelApp.Workbooks.Add(True)
Set ws = wb.Sheets(1)

ws.Cells(1,1).Value = "Hello"
ws.Cells(1,2).Value = "World"

wb.SaveAs("c:\test.xls")
objExcelApp.Quit()
Exit Sub

ErrMyErrorHandler:
MsgBox Err.Description, vbExclamation + vbOKCancel, "Error: " & CStr(Err.Number)    
End Sub

Work()

выдает эту ошибку:

error

Строка 2 - это строка с оператором On Error.Что я делаю не так?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 27 июня 2011

Heximal правильно, что VBScript не позволяет настраивать метки для обработчиков ошибок.Используя ваш пример, вы действительно пытаетесь сделать что-то вроде этого.

Sub Work
    On Error Resume Next

    Dim objExcelApp
    Dim wb
    Dim ws

    Set objExcelApp = CreateObject("Excel.Application")
    Set wb = objExcelApp.Workbooks.Add(True)
    Set ws = wb.Sheets(1)

    ws.Cells(1,1).Value = "Hello"
    ws.Cells(1,2).Value = "World"

    wb.SaveAs("c:\test.xls")
    objExcelApp.Quit()

    If Err.Number <> 0 Then ErrMyErrorHandler
End Sub

Sub ErrMyErrorHandler
    MsgBox Err.Description, vbExclamation + vbOKCancel, "Error: " & CStr(Err.Number)
End Sub

Work()

Но вы должны понимать, что это не самый разумно составленный код.Вы должны выполнять проверку ошибок в КАЖДОМ соответствующем месте и обрабатывать их индивидуально по мере необходимости.Если вы ищете полномасштабное решение для обработки ошибок, вам нужно больше узнать о том, как VBScript работает внутри.Посмотрите на следующую ссылку.

Ошибка перехвата и захвата стороннего вывода в VBScript

4 голосов
/ 27 июня 2011

похоже, что вы не можете указать пользовательскую метку на обработчик ошибок в VB Script. Вы можете использовать только

on error goto 0 '(raises exceptions)
on error resume next '(ignores exceptions)

если вы используете второй синтаксис, вы можете перехватывать возникающие исключения через глобальную переменную Err:

  if Err.Number <> 0 then MsgBox "Exception occurred: " & Err.Description
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...