捕获运行时错误

AutoCAD ActiveX/VBA

 
捕获运行时错误
 
 
 

在 VB 和 VBA 中,使用 On Error 语句来捕获运行时错误。此语句为系统设置精确的捕获。当错误发生时,此语句会自动转到专门编写的错误处理程序,系统的默认错误处理则被略过。

On Error语句有三种形式:

  • On Error Resume Next
  • On Error GoTo Label
  • On Error GoTo 0

当希望忽略错误时,可以使用 On Error Resume Next 语句。此语句捕获错误但是不会显示错误信息或者终止程序,而是移到下一行代码继续执行。例如,如果希望创建子例程来遍历模型空间并修改每个图元的颜色,则在尝试对锁定图层上的图元着色时,AutoCAD 将会抛出错误。这时不需要终止过程,而只需要跳过锁定图层上的图元并继续处理其余的图元。On Error Resume Next 语句就可以完成这个过程。

当希望编写明确的处理程序时,可以使用 On Error GoTo Label 语句。此语句捕获错误但不会显示错误信息或者终止程序,而是跳到代码中的特定位置。然后代码可以使用适当的方式来响应错误。例如,可以扩充上一个样例,以显示包含锁定图层上每个图元句柄的消息。

用 On Error Resume Next 语句处理错误

以下子例程遍历模型空间,并将每个图元的颜色改为红色。对具有若干图元、有些图元位于锁定图层上的图形运行这个子例程。接着注释掉 On Error Resume Next 语句并再次运行子例程。用户将会看到子例程在遇到锁定图层上的第一个图元时终止。

Sub Ch11_ColorEntities()
    Dim entry As Object
    On Error Resume Next
    For Each entry In ThisDrawing.ModelSpace
        entry.Color = acRed
    Next entry
End Sub

用 On Error GoTo 语句处理错误

以下子例程遍历模型空间,并将每个图元的颜色改为红色。对于锁定图层上的每个图元,错误处理程序会显示一条自定义的错误信息和该图元的句柄。对具有若干图元、有些图元位于锁定图层上的图形运行这个子例程。接着注释掉 On Error GoTo MyErrorHandling 语句并再次运行子例程。用户将会看到子例程在遇到锁定图层上的第一个图元时终止。

Sub Ch11_ColorEntities2()
    Dim entry As Object
    On Error GoTo MyErrorHandler
    For Each entry In ThisDrawing.ModelSpace
        entry.Color = acRed
    Next entry
    ' 重要信息!在退出错误处理程序之前退出子例程
    Exit Sub
MyErrorHandler:
    Msgbox entry.EntityName + " is on a locked layer."+ _
                 " The handle is: " + entry.Handle
    Resume Next
End Sub

On Error GoTo 0 语句取消当前的错误处理程序。On Error Resume NextOn Error GoTo Label 语句会保持有效,直到子例程结束、声明了其他错误处理程序或者使用 On Error GoTo 0 语句取消错误处理程序为止。