错误处理
在编写程序时遇到错误是在所难免的,这几天进行学生信息管理系统的调试,不运行不知道,当最后敲完运行的时候发现错误一个接着一个。好多错误都是意想不到的。很多错误也不是就能通过修改代码能解决的了的,所以能够很好的避免和处理程序中遇到的错误也是一项重要的技术。
现在就把vb错误处理的方法归纳如下:
一、错误的来源
编译错误是指使得Visual Bacsic(下面简称VB)的编译器无法对代码进行编译的错误。大多数编译错误是句法错误造成的。运行期错误,程序在运行时产生的错误。
二、vb编译选项
VB有两个设置项会在很大程度上影响我们创建非常坚实的代码的能力。一个设置项是Compile On Demand(按需要进行编译)也叫“请求时编译” ,另一个设置项是Background Compile(后台编译)。其实这个我现在还没用到,相信等我用到后体会会更深的。
三、Err对象
我首先介绍一下Err对象。
这是个运行期对象,它包含了关于最新错误的信息。当程序运行时遇到一个错误,或者当我们使用Err对象的Raise方法故意引发一个错误时,便形成Err对象的属性。当遇到On Error语句(比如On Error Resume Next),并且在使用Exit Sub、Exit Function或Exit Property语句退出一个过程后,Error对象的属性值就被清除。若要显式清除Err对象,可以调用它的Clear方法。
1)Err对象的属性:
下面是一段使用错误属性的代码:
Private Sub Command1_Click()
On Error Resume Next
Print 10 / 0
Dim intRec As Integer
'显示 错误号,错误源,错误描述
If Err.Number > 0 Then
intRec = MsgBox("错误号:" & Err.Number & Chr(10) & Chr(13) _
& "错误源:" & Err.Source & Chr(10) & Chr(13) _
& "错误描述:" & Err.Description, vbCritical)
End If
End Sub
通过该利用错误属性来捕捉错误的具体信息可以帮助我们很好的避免和处理错误。
(2)Err对象主要方法
(3)错误处理程序的类型
1)On Error Resume Next
对错误进行处理的最简单(和最危险)的方法是使用On Error Resume Next语句。On Error Resume Next语句规定,代码中的错误将完全被忽略,存在错误的代码行被跳过,然后继续执行下一个语句。
例如忽略上面错误的语句:
Private Sub Command1_Click()
On Error Resume Next ’忽略错误向下进行
Print 10 / 0
End Sub
注意:
Resume [ 0 ] 返回到出错语句,再次执行
Resume Next 返回到出错语句下一句
2)On Eror goto Line [Line或字符串 line 参数可以是任何行标签或行号] 遇到错误跳转到指定的行
忽略代码中的错误是非常危险的,并且是一种不得已时采用的办法。当一个过程中出现了意料之外的错误时,该过程就会产生许多问题。如果忽略该错误,就会对用户产生严重的影响,比如数据没有保存,或者保存不正确。许多情况下,当出现代码错误时,必须执行某些操作,将代码的执行转移到On Error GoTo语句中指定的错误处理程序.
比如利用下面的代码来解决上边的被除数为0的问题。
Private Sub Command1_Click()
On Error GoTo PROC_ERR
Print 10 / 0
PROC_ERR:
MsgBox "被除数不能为0!", vbOKOnly + vbExclamation, "警告"
Exit Sub
End Sub
当处理完一个过程后,Exit Sub、Exit Function 或 Exit Property 都可以关闭错误处理的活动状态。
注意:
1)0表示没有错误
On Error GoTo 0 禁止当前过程中任何已启动的错误处理程序。
2)也可用 if语句避免上述错误
Private Sub Command1_Click()
On Error Resume Next
Print 10 / 0
If (Err.Number > 0) Then
MsgBox "被除数不能为0", vbOKOnly + vbExclamation, "警告"
End If
End Sub
3)Resume [Line|Next|] 转移到指定的行