Cerrar formulario y terminar ejecución

Hola a todos.
Os cuento lo que me pasa de la mejor manera que pueda.
Tengo un excel con dos pestañas. Lo tengo codificado para que cuando el usuario le de a la POR de salir, le aparezca un formulario con tres botones: Guardar como, Guardar y Cancel, además de la POR para salir del propio formulario.
Los botones los tengo codificados para que cada uno haga lo que le corresponde y la POR del formulario, la manera que he tenido de 'anularlo' ha sido con el siguiente código:
Private Sub UserForm_QueryClose(cancel As Integer, CloseMode As Integer)
   MsgBox "Por favor, utilice los botones del formulario para cerrar el documento.",   vbInformation, "Opción no permitida"
   cancel = True
   Application.DisplayAlerts = False
End Sub

Ahora os cuento dónde tengo el problema:
En el momento de pulsar el botón 'Cancelar', lo que quiero es que se cierre el formulario y excel le devuelva el control al usuario y no haga nada más, es decir, que la hoja donde estuviera el usuario antes de dar a la POR le aparezca como si nada hubiera pasado. Es decir, lo que quiero es que si el usuario le da a salir y al salirle el formulario ve que no quiere 'grabar' ni 'grabar como' que pueda cancelar la operación.
Hasta aquí parece la cosa fácil, ¿no?... Pues bien, cuando pulso el botón 'Cancelar' que tengo condificado con el siguiente código:
Private Sub CommandButton1_Click()
   cancel = True
   Application.DisplayAlerts = False
   Formulario_guardar.Hide
End Sub

Y ahora viene el problema¡... Cuando debugando la ejecución, cuando hace el 'end sub' del botón, vuelve al 'end sub' del evento donde se invocó al formulario, y al llegar a este 'end sub' es cuando salta el mensaje de excel de:
Do you want to save changes you made to '.........'?
Vamos, el mensaje típico de si deseas guardar los cambios.
Este es el mensaje que no quiero que me aperezca¡¡¡ y no consigo controlarlo con la intrucción 'Application.DisplayAlerts = False'...
Pufff, entiendo que es difícil ver el tema... Pero es que no sé por donde salir... No entiendo el porqué me sale el mensajito...
Otra cosa que he probado ha sido el poner el END... Quedando el código del botón 'Cancelar' del formulario con el código:
Private Sub CommandButton1_Click()
   cancel = True
   Application.DisplayAlerts = False
   End
End Sub

Pero lo mismo, cuando ejecuta la línea de 'end sub' me aparece el mensajito de querer guardar los cambios...
El 'ActiveWindow.Close' no me vale porque me cierra el documento entero y yo lo que quiero es que me cierre sólo mi formulario.
Gracias, compañeros¡.

1 respuesta

Respuesta
1
No nos dices cual es el evento desde el que abres el formulario, supongo que será el evento Workbook_BeforeClose
Si esto es así, voy a imaginarme que tu código en este evento es el siguiente:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Formulario_guardar.Show
End Sub

Bien, es en este evento donde tienes que controlar el mensaje de guardar los cambios, es decir si aquí pones:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Formulario_guardar.Show
    Cancel = True
End Sub
Entonces dejará de salirte el mensaje que no quieres que te salga.
Esto es solo una pista que espero que te sirva.
De todos modos, si sigues teniendo el mismo problema, no dudes en enviarme por correo tu excel, que seguramente viéndolo pueda ayudarte mejor.
Saludos,
Carlos
[email protected]
Hola, Carlos.
Antes de nada, muchísimas gracias por tu tiempo y esfuerzo.
Madre mía¡ Me has solucionado el problema¡ Increíble pero no lo veía, de verdad¡... y mira que he estado probando cosas pero todas desde el formulario... me he embuclado y no salía de ahí.
Muchísimas gracias de nuevo, maestro y que sepas que hoy harás que duerma más tranquilo... en serio que esto ya me tenía desquiciaito...
Un abrazo¡ Y mil gracias... tiene mucho mérito lo que hacéis los expertos. Tienes todo mi reconocimiento.
Alfonso (Madrid).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas