2011-06-27 117 views
3

我完全不是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語句行。我究竟做錯了什麼?

謝謝。

回答

3

看起來像你不能將自定義標籤指向VB腳本中的錯誤處理程序。如果你使用第二個語法,你只能使用

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

,你可以趕上通過ERR全局變量發生的例外:

if Err.Number <> 0 then MsgBox "Exception occurred: " & Err.Description 
+0

&Err.Description – RaRdEvA

3

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