Identificación de errores de ejecución

AutoCAD ActiveX

 
Identificación de errores de ejecución
 
 
 

En VB y VBA, los errores de ejecución se identifican por medio de la instrucción On Error. Esta instrucción pone literalmente una trampa al sistema y, cuando se produce un error, el proceso se desvía hacia el gestor de errores concreto que se haya especificado. En este caso se omite la gestión de errores establecida por defecto.

La instrucción On Errortiene tres modalidades:

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

La instrucción On Error Resume Next se utiliza cuando se desea ignorar los errores. Esta instrucción identifica el error, y en vez de presentar un mensaje de error y cerrar el programa, pasa a la siguiente línea de código y continúa con la ejecución. Por ejemplo, suponga que desea crear una subrutina para iterar en el espacio modelo y cambiar el color de cada entidad, pero sabe que AutoCAD arrojará un error si se intenta asignar color a una entidad que se encuentra en una capa bloqueada. En lugar de cerrar el programa, basta con que se salte la entidad de la capa bloqueada y continúe procesando las demás entidades. Esto es, precisamente, lo que la instrucción On Error Resume Next permite hacer.

La instrucción On Error GoTo Label se utiliza para escribir rutinas específicas de control de errores. Esta instrucción identifica el error, y en vez de presentar un mensaje de error y cerrar el programa, salta a un punto concreto del código. A continuación, el código responde al error de la forma más idónea para la aplicación. Por ejemplo, el código anterior podría ampliarse para que se muestre un mensaje con el identificador de todas las entidades de la capa bloqueada.

Gestión de errores con la secuencia On Error Resume Next

La siguiente subrutina itera en el espacio modelo y cambia a rojo el color de las entidades. Intente ejecutar esta subrutina en un dibujo que tenga algunas de sus entidades en una capa bloqueada. A continuación, amplíe con explicaciones la instrucción On Error Resume Next y vuelva a ejecutar la subrutina. Observará que la subrutina se interrumpe en la primera entidad de la capa bloqueada.

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

Gestión de errores con la instrucción On Error GoTo

La siguiente subrutina itera en el espacio modelo y cambia a rojo el color de las entidades. El gestor de errores muestra, por cada entidad de la capa bloqueada, un mensaje de error junto con el identificador de la entidad. Intente ejecutar esta subrutina en un dibujo que tenga algunas de sus entidades en una capa bloqueada. A continuación, amplíe con explicaciones la instrucción On Error Resume GoTo MyErrorHandling y vuelva a ejecutar la subrutina. Observará que la subrutina se interrumpe en la primera entidad de la capa bloqueada.

Sub Ch11_ColorEntities2()
    Dim entry As Object
    On Error GoTo MyErrorHandler
    For Each entry In ThisDrawing.ModelSpace
        entry.Color = acRed
    Next entry
    ' Important! Exit the subroutine before the error handler
    Exit Sub
MyErrorHandler:
    Msgbox entry.EntityName + " is on a locked layer." + _
                 " The handle is: " + entry.Handle
    Resume Next
End Sub

La instrucción On Error GoTo 0 cancela el identificador del error actual. Las instrucciones On Error Resume Next y On Error GoTo Label siguen activas hasta que finaliza la subrutina, hasta que se declara otra rutina de control de errores o hasta que se cancela la rutina de control de errores con la instrucción On Error GoTo 0.