Controlar comportamiento de la tecla ESC (Cancelar) con EnableCancelKey en Excel

Complementando mi Lista incompleta de tips para programar macros en Excel, añado un procedimiento llamado EnableCancelKey dependiente del objeto Application, el cual nos permite controlar el comportamiento de la tecla Cancelar en nuestras macros.

Cancelar macro usando ESC con mensaje personalizado

Si lo que deseamos es que cuando nuestra macro dure demasiado, el usuario tenga la opción de Cancelar la acción, pero con la salvedad de que podemos personalizar un mensaje de aviso que sustituya al clásico error de vba cuando cancelamos una macro.

Código

Sub EnableCancelKey1()
    Dim i As Double
    'Cuando se genere un error nos mandará a la etiqueta ManejoError
    On Error GoTo ManejoError
    Application.EnableCancelKey = xlErrorHandler
    'Damos la opción al usuario de poder cancelar la acción de la macro
    MsgBox "El siguiente código puede tomar mucho tiempo: " & _
           "presionar ESC para cancelar", vbInformation, "EXCELeINFO"
    For i = 1 To 100000
        ActiveSheet.Range("A" & i).Value = i
    Next i
    '
ManejoError:
    If Err = 18 Then
        MsgBox "La acción se ha cancelado", vbExclamation, "EXCELeINFO"
    End If
End Sub

Evitar el uso de la tecla ESC

Existe también la opción de que impidamos que el usuario haga uso de la tecla ESC para cancelar la macro, pero tal acción debe programarse con cuidado, ya que si se corre una macro con un ciclo infinito, no se podrá cancelar la macro.

Código

Sub EnableCancelKey2()
    Dim i As Double
    'Deshabilitamos el uso de la tecla ESC
    Application.EnableCancelKey = xlDisabled
    MsgBox "La siguiente macro no podrá cancelarse", vbInformation, "EXCELeINFO"
    For i = 1 To 100000
        ActiveSheet.Range("A" & i).Value = i
        Application.StatusBar = Range("A" & i).Value
    Next i
    Application.StatusBar = False
End Sub

You may also like...