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