在编写程序时遇到错误是在所难免的,这几天进行学生信息管理系统的调试,不运行不知道,当最后敲完运行的时候发现错误一个接着一个。好多错误都是意想不到的。很多错误也不是就能通过修改代码能解决的了的,所以能够很好的避免和处理程序中遇到的错误也是一项重要的技术。
现在就把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|] 转移到指定的行