On error goto 0
给予手错误处理的Visual Basic(一般消息框)
On error goto label
将你的代码重定向到标签:
On error resume next
会忽略该错误并继续
Resume next
将代码重定向到下一行ER错误引发
这意味着,如
On Error goto 0
...
On Error goto 0
没有意义
如果指令的组合要重定向你必须做一个“误差”指令它是这样的:
Do While Not rs.EOF
On Error Resume Next
rs2.Open strsql
On error Goto 0
rs2.moveNext
Loop
如果您想将错误重定向到一个标签(用于治疗或其他),然后回去的地方,在出现错误代码,你写的东西像:
On error goto label
...
...
On error goto 0
exit sub (or function)
label:
....
resume next
end function
但我真的建议你在你的错误管理更严格。你应该首先能够做这样的事情:
Set objexcel = CreateObject("excel.Application")
objexcel.Visible = True
On Error GoTo error_Treatment
wbExists = False
Set wbexcel = objexcel.Workbooks.Open("C:\REPORT3.xls")
Set objSht = wbexcel.Worksheets("Sheet1")
objSht.Activate
wbExists = True
On error GoTo 0
Set db = DBEngine.opendatabase("C:\book.mdb")
Set rs = db.OpenRecordset("records")
Set rs2 = CreateObject("ADODB.Recordset")
rs2.ActiveConnection = CurrentProject.Connection
For Each tdf In CurrentDb.TableDefs
....
'there are a number of potential errors here in your code'
'you should make sure that rs2 is closed before reopening it with a new instruction'
'etc.'
Next tdf
Exit sub
error_treatment:
SELECT Case err.number
Case **** '(the err.number raised when the file is not found)'
objexcel.Workbooks.Add
Set wbexcel = objexcel.ActiveWorkbook
Set objSht = wbexcel.Worksheets("Sheet1")
Resume next 'go back to the code'
Case **** '(the recordset cannot be opened)'
....
....
Resume next 'go back to the code'
Case **** '(whatever other error to treat)'
....
....
Resume next 'go back to the code'
Case Else
debug.print err.number, err.description '(check if .description is a property of the error object)'
'your error will be displayed in the immediate windows of VBA.'
'You can understand it and correct your code until it runs'
End select
End sub
下一步将是预料中的错误在你的代码,以便Err对象将不会引发。例如,您可以编写这样一个泛型函数:
Public function fileExists (myFileName) as Boolean
然后,您可以测试您的XLS文件是否存在利用代码中的这一功能:
if fileExists("C:\REPORT3.xls") Then
Set wbexcel = objexcel.Workbooks.Open("C:\REPORT3.xls")
Else
objexcel.Workbooks.Add
Set wbexcel = objexcel.ActiveWorkbook
Endif
Set objSht = wbexcel.Worksheets("Sheet1")
objSht.Activate
你不需要你的wbExist变量了...
以同样的方式,你应该预测你的记录集没有记录的情况。在测试之前写下rs.MoveFirst可能会引发错误。你应该写
If rs.EOF and rs.BOF then
Else
rs.moveFirst
Do while not rs.EOF
rs.moveNext
Loop
Endif
似乎并不工作 – tksy 2008-12-01 14:20:28
你可以在这里发布你的源代码吗?也许你错误地使用了错误语句。 – 2008-12-01 14:23:50