On Error语句出错

时间:2011-06-27 07:45:13

标签: vbscript

我完全不是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 个答案:

答案 0 :(得分:4)

看起来你不能将自定义标签指向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

答案 1 :(得分:4)

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如何在内部工作的更多信息。请看以下链接。

Error Trapping and Capturing Third-Party Output in VBScript