Hola usuario de nuestro sitio, tenemos la respuesta a tu interrogante, desplázate y la obtendrás aquí.
Solución:
Agregue otro botón llamado “CancelButton” que establezca una bandera y luego verifique esa bandera.
Si tiene bucles largos en las “cosas”, búsquelo allí también y salga si está configurado. Utilice DoEvents dentro de ciclos largos para asegurarse de que la interfaz de usuario funcione.
Bool Cancel
Private Sub CancelButton_OnClick()
Cancel=True
End Sub
...
Private Sub SomeVBASub
Cancel=False
DoStuff
If Cancel Then Exit Sub
DoAnotherStuff
If Cancel Then Exit Sub
AndFinallyDothis
End Sub
¿Qué hay de Application.EnableCancelKey? Utilice el botón Esc
On Error GoTo handleCancel
Application.EnableCancelKey = xlErrorHandler
MsgBox "This may take a long time: press ESC to cancel"
For x = 1 To 1000000 ' Do something 1,000,000 times (long!)
' do something here
Next x
handleCancel:
If Err = 18 Then
MsgBox "You cancelled"
End If
Fragmento de http://msdn.microsoft.com/en-us/library/aa214566(office.11).aspx
O, si quieres evitar el uso de un variable global Podrías usar el que rara vez se usa .Tag
propiedad del formulario de usuario:
Private Sub CommandButton1_Click()
Me.CommandButton1.Enabled = False 'Disabling button so user cannot push it
'multiple times
Me.CommandButton1.caption = "Wait..." 'Jamie's suggestion
Me.Tag = "Cancel"
End Sub
Private Sub SomeVBASub
If LCase(UserForm1.Tag) = "cancel" Then
GoTo StopProcess
Else
'DoStuff
End If
Exit Sub
StopProcess:
'Here you can do some steps to be able to cancel process adequately
'i.e. setting collections to "Nothing" deleting some files...
End Sub
Te invitamos a añadir valor a nuestro contenido informacional participando con tu experiencia en las explicaciones.