|
5#
楼主 |
发表于 2006-6-6 08:43:00
|
只看该作者
直接错误处理
若在可能导致错误的每一行后立即检测错误,这就是直接错误处理。使用直接错误处理,可以编写在错误发生时返回错误号的函数和语句;在过程中产生一个Visual Basic 错误,并在调用过程中处理错误;或者编写一个返回Variant数据变量的函数,为调用过程指示所发生的错误。
返回错误号
返回错误号的方法有很多,其中最简单的方法是创建一个在错误发生时返回错误号的函数和语句,而不是返回某个变量。下面示例说明了如何在FileExists函数示例中使用这种方法,以指示某特定文件是否存在。
Function FileExists (p As String) As Long
If Dir (p) <> " " Then
FileExists = conSuccess ' 返回一个常量,指示文件存在。
Else
FileExists = conFailure ' 返回一个常量,指示失败。
End If
End Function
Dim ResultValue As Long
ResultValue = FileExists ("C:\Testfile.txt")
If ResultValue = conFailure Then
.
. ' 处理错误。
.
Else
.
. ' 继续进行程序。
.
End If
直接错误处理的关键在于在每个语句或函数调用后立即检测错误。在这种方式中,你可设计一个处理程序,以准确预计可能出现的错误的类别,并采用相应的方法解决错误。这种方法不需要产生一个实际的运行时错误。
在调用过程中处理错误
指示错误情况的另一方法是在过程自身中生成一个Visual Basic 错误,并在调用过程的直接错误处理程序中处理这个错误。下面的示例说明在FileExists过程中,当操作不成功时产生的错误号。在调用该函数前,On Error Resume Next语句在错误发生时为Err对象属性赋值,但并不企图运行一个错误处理例程。
On Error Resume Next语句后紧跟错误处理代码。这个代码可检测Err 对象的属性,以确定是否有错误发生。如果Err.Number不为零,则已发生错误,根据Err对象的属性值,错误处理代码可采取相应的措施。
Function FileExists (p As String)
If Dir (p) <> " " Then
Err.Raise conSuccess ' 返回一个常量,指示文件存在。
Else
Err.Raise conFailure ' 产生错误号conFailure
End If
End Function
Dim ResultValue As Long
On Error Resume Next
ResultValue = FileExists ("C:\Testfile.txt")
If Err.Number = conFailure Then
.
. ' 处理错误。
.
Else
.
. ' 继续进行程序。
.
End If
下一示例同时使用返回变量和一个传递的自变量,以指示错误的情况。
Function Power (X As Long, P As Integer, ByRef Result As Integer) _As Long
On Error GoTo ErrorHandler
Result = x^P
Exit Function
ErrorHandler:
Power = conFailure
End Function
' 调用Power函数。
Dim lngReturnValue As Long, lngErrorMaybe As Long
lngErrorMaybe = Power (10, 2, lngReturnValue)
If lngErrorMaybe Then
.
. ' 处理错误。
.
Else
.
. ' 继续进行程序。
.
End If
如果编写的函数只是简单地返回一个结果变量或返回一个错误代码,那么结果变量可能在错误代码的范围内,这样调用过程就无法区别是结果变量还是错误代码。返回变量和一个传递自变量的同时使用,可使你的程序确定函数调用是否失败,并采用适当的措施。
Variant数据类型的使用
返回内部错误信息的另一种方法是利用Visual Basic 的Variant数据类型及相关的一些函数。Variant具有一个标识符,可指示变量中包含数据的类型,并且Variant还可被标识为一个Visual Basic 错误代码。你可以编写一个函数来返回一个Variant,并使用标识符为调用过程指示所发生的错误。
下面示例说明如何编写Power函数,以返回一个Variant。
Function Power (X As Long, P As Integer) As Variant
On Error GoTo ErrorHandler
Power = x^P
Exit Function
ErrorHandler:
Power = CVErr(Err.Number) ' 将错误代码转换为标识的变量。
End Function
' 调用Power函数。
Dim varReturnValue As Variant
varReturnValue = Power (10, 2)
If IsError (varReturnValue) Then
.
. ' 处理错误。
.
Else
.
. ' 继续进行程序。
.
End If |
|