|
yInvalidSphereFormat = rayErrorBase + 2
Public Const rayLightAtEye = rayErrorBase + 3
:
如果随后发现新定义的错误常数与其他程序发生冲突,就可以迅速地通过改变基值实现重新定义了所有的错误常量。
将错误处理程序单独存放
请使用Resume、Resume Next、Exit Sub/Function/Property、End Sub/Function/Property 或者 Err.Raise来结束错误处理代理程序的编写。永远不要发生从一个错误代理进入到另一个错误代理的代码处理过程。
比如,下面的代码就发生了这种不好的情况:
Private Sub LoadData(ByVal filename As String)
Dim fnum As Integer
‘文件还没有打开
On Error GoTo FileIsClosed
’打开文件
fnum = FreeFile
Open filename For Input As fnum
‘文件被打开了
On Error GoTo FileIsOpen
’读取数据
:
进入错误处理代理,关闭文件
On Error Resume Next
FileIsOpen:
‘关闭文件
Close fnum
FileIsClosed:
’执行其他任务
:
‘结束程序
End Sub
这段代码就存在几个问题。首先,它让人感到困惑。当添加新的错误处理代理程序时,可能就会发生误会。同时,代码中没有显示错误信息,相反,代码“安静”地执行,就好像没有发生任何错误。所以,为了防止这些,一定记住,单独地编写每块错误处理代理程序。
理解错误处理程序的作用范围
当程序遇到错误时,Visual Basic检查在当前程序段中是否安装了错误处理代理程序。如果安装了,控制将转移到那个程序段中。如果没有发现,Visual Basic上移到调用堆栈中的调用相应,检查是否在那个程序段中安装了错误处理代理程序。如果安装了,系统将在那个错误代理中恢复执行。如果仍没有发现,就一直上移,直到找到一个安装的错误处理代理程序。如果最终没有找到,程序将崩溃。
因此,所有Visual Baisc代码执行时,开始要设有一个事件处理代理或者一个Main程序。这意味着,如果在每个事件处理和Main程序中放置错误处理代理程序,就能防御所有的错误发生。然后,不管程序在哪里发生错误,控制最终都能转移到这里。 不要嵌套使用错误处理程序
错误处理代理程序运行上与其他程序有些不同,在一段错误处理代理的代码中,不可能激活另外的错误处理代理程序。换言之,一段错误处理代理程序中不能使用On Error GoTo来定义扑捉它自身错误的代码。如果其中使用了这个语句,只有当这个错误处理代理程序执行完成并返回到主代码中时,新的错误处理代理程序才可能发生效果。
嵌套使用错误代理的事情非常容易使人困惑。在下面的代码中,如果Subroutine2产生一个错误,就不能确定是否控制将转移到Error1还是Error2中。如果Subroutine1运行正确,控制将转到Error1,但是当Subroutine1发生错误时,控制将转移到Error2:
On Error GoTo Error1
Subroutine1
Subroutine2
Exit Sub
Error1:
On Error GoTo Error2
MsgBox "Error1:" & Str$(Err.Number) & "." & vbCrLf & _
Err.Description
Resume Next
Error2:
MsgBox "Error2:" & Str$(Err.Number) & "." & vbCrLf & _
Err.Description
Resume Next
因此,不要在一段错误处理代理程序中使用On Error语句,应该将所有的错误处理代理程序段按照顺序编写。
上一页 [1] [2] 没有相关教程
|