Evento al cerrar Formulario

22/12/2008 - 17:07 por Luis | Informe spam
Qué tal! foro ante todo felices fiestas anticipadas... tengo una
consulta y me gustaría mucho que me ayuden.. Resulta que tengo dos
formularios: el 1ero me sirve para ingresar un usuario y una
contraseña a partir de los cuales se abre el formulario 2 con ciertas
restricciones dependiendo del usuario. Existe un usuario
administrador, el cual dentro del 2do formulario al presionar un botón
puede acceder a las hojas y código del libro. Mi intención es que
ningún usuario que no sea el administrador pueda salir de ambos
formularios (me preocupa sobre todo la `[x] de salir que aparece en la
esquina superior derecha de todo formulario). He escrito el siguiente
código para el evento close de ambos:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As
Integer)
Application.DisplayFullScreen = False
Worksheets("Hoja1").Visible = xlSheetVeryHidden
Worksheets("Hoja2").Visible = xlSheetVeryHidden
Worksheets("Hoja3").Visible = xlSheetVeryHidden
Unload Me
ThisWorkbook.Close SaveChanges:=True
Application.Quit
End Sub

Pero este código hace que cuando el administrador intente acceder a
las hojas con el botón que les comentaba (que únicamente contiene el
famoso 'unload me').

Como otra opción pensaba en 'desaparecer' la dichosa [x] pero no se
como hacerlo =( , de tal manera que todos los usuarios sólo puedan
salir presionando alguno de los botones que están dentro de los
formularios..si ustedes me podrían ayudar les agradecería muchisimo xq
es urgente!

Y una consulta adicional mi intención como podrán ver en el código que
expuse, es cerrar por completo la aplicación, pero siempre me queda la
ventana de excel (sin ningún libro) abierta.

Muchisimas Gracias!!


Saludos!!

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
23/12/2008 - 03:06 | Informe spam
hola, Luis !

__ 1 __
... tengo dos formularios: el 1ero me sirve para ingresar un usuario y una contrasena
a partir de los cuales se abre el formulario 2 con ciertas restricciones dependiendo del usuario.
Existe un usuario administrador, el cual dentro del 2do formulario al presionar un boton
puede acceder a las hojas y codigo del libro.
Mi intencion es que ningún usuario que no sea el administrador pueda salir de ambos formularios
(me preocupa sobre todo la `[x] de salir que aparece en la esquina superior derecha de todo formulario).



1) si SOLO quieres evitar que el usuario cierre/cancele el formulario SIN tu permiso...
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = CloseMode = vbFormControlMenu
End Sub

=> el usuario SOLO podra' salir/terminar/... el formulario a traves de la salida que TU le proveas en el codigo
o... (solamente) pulsando la combinacion {ctrl}+{pausa} =>interrupcion del codigo<
__ 2__
He escrito el siguiente codigo para el evento close de ambos:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Application.DisplayFullScreen = False
Worksheets("Hoja1").Visible = xlSheetVeryHidden
Worksheets("Hoja2").Visible = xlSheetVeryHidden
Worksheets("Hoja3").Visible = xlSheetVeryHidden
Unload Me
ThisWorkbook.Close SaveChanges:=True
Application.Quit
End Sub



2) aqui tienes un detalle... cuando cierras el libro con la instruccion:
-> ThisWorkbook.Close SaveChanges:=True
sucede que la siguiente linea...
-> Application.Quit
-> YA NO SE EJECUTA (debido a que el libro ya se cerro)

solucion ?... solo invierte el orden de las lineas :D

__ 3 __
Pero este codigo hace que cuando el administrador intente acceder a las hojas con el boton que les comentaba
(que unicamente contiene el famoso 'unload me').



3) esta parte de tu consulta no es clara (la frase esta inconclusa) -???-

__ 4 __
Como otra opcion pensaba en 'desaparecer' la dichosa [x] pero no se como hacerlo =(
de tal manera que todos los usuarios solo puedan salir presionando alguno de los botones
que estan dentro de los formularios..si ustedes me podrían ayudar les agradecería muchisimo xq es urgente!



4) comenta si te es suficiente con la opcion 1 -?-

__ 5 __
Y una consulta adicional mi intencion como podran ver en el codigo que expuse
es cerrar por completo la aplicacion, pero siempre me queda la ventana de excel (sin ningun libro) abierta.



5) comentado en el punto 2) ;)

saludos,
hector.
Respuesta Responder a este mensaje
#2 Luis
23/12/2008 - 16:25 | Informe spam
Héctor muchísimas gracias por tu respuesta.. pero quisiera saber de
qué manera tengo que combinar este código con el código que te expuse
(pongo ambos juntos? en qué órden?).. Y otra consulta la verdad no
tengo mucho conocimiento al detalle del evento Query Close, las
funciones, características del mismo y las cosas que se puede realizar
dentro.. si puedes y no es mucha molestia quisiera una pequeña
explicación de el (xej qué quiere decir: "Cancel = CloseMode vbFormControlMenu"?? y como hacer que este código se ejecute sólo
cuando el usuario presione determinados botones?)

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  Cancel = CloseMode = vbFormControlMenu
End Sub



ah y la aclaración que me pedías con respecto a:

Pero este codigo hace que cuando el administrador intente acceder a las hojas con el boton que les comentaba
(que unicamente contiene el famoso 'unload me').



Con este texto me referia a que al utilizar mi código:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Application.DisplayFullScreen = False
Worksheets("Hoja1").Visible = xlSheetVeryHidden
Worksheets("Hoja2").Visible = xlSheetVeryHidden
Worksheets("Hoja3").Visible = xlSheetVeryHidden
Unload Me
ThisWorkbook.Close SaveChanges:=True '*
Application.Quit '*
End Sub



y presionar cualquiera de los botones de salir (en el formulario 1
tengo un boton cancelar y en el 2 uno de Salir cuyos códigos son
iguales.. contienen "unload me" y los correspondientes al cierre de la
aplicación [que marqué con un *]... se diferencian con un 3er botón
que se encuentra en el formulario 2 pues este último sólo puede ser
visualizado por un usuario administrador y contiene sólamente el
código "unload me", puesto que mi intención es que con este se cierre
el formulario únicamente y al administrador no se le cierre el libro
de tal manera que pueda ver las hojas del mismo y hacer operaciones
sobre ellas) simplemente la aplicación se cierra, y no quiero que esto
le ocurra al administrador.

Muchas gracias y espero no cansarte con tanto parlamento..

Saludos!
Respuesta Responder a este mensaje
#3 Héctor Miguel
23/12/2008 - 18:42 | Informe spam
hola, Luis !

1) este codigo, no deja que el formulario se cierre al pulsar la [X] en la barra de titulos
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = CloseMode = vbFormControlMenu
End Sub

(pero como te comentaba):
el usuario SOLO podra' salir/terminar/... el formulario a traves de la salida que TU le proveas en el codigo
o... (solamente) pulsando la combinacion {ctrl}+{pausa} =>interrupcion del codigo<
esto tambien requiere que las instrucciones que ejecutabas en este procedimiento las "muevas" al evento '_terminate'

2) esto facilita las cosas... si el usuario administrador es el unico que puede usar el tercer boton (con solo el "unload me")
y segun lo que necesites hacer (cerrar el libro y/o ademas salir de la aplicacion) dependiendo de los otros usuarios
y ya tienes 3 botones (uno para cada efecto)...

a) deja la instruccion del queryclose como en el punto 1
b) prueba con tus codigos de salida segun el boton pulsado por el usuario (p.e.)
suponiendo ComandButton1 para cerrar, CommandButton2 para cerrar Y SALIR y CommandButton3 para el administrador...

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = CloseMode = vbFormControlMenu
End Sub
Private Sub CommandButton1_Click()
MsgBox "Cerrando el libro ..."
End Sub
Private Sub CommandButton2_Click()
MsgBox "Cerrando el libro Y SALIENDO del Excel ..."
End Sub
Private Sub CommandButton3_Click()
Unload Me
End Sub

no olvides que para el caso de cerrar Y SALIR debes invertir el orden de las instrucciones...

de:
ThisWorkbook.Close SaveChanges:=True
Application.Quit

a:
Application.Quit
ThisWorkbook.Close SaveChanges:=True

saludos,
hector.

__ 1 __
... quisiera saber de que manera tengo que combinar este codigo con el codigo que te expuse
(pongo ambos juntos? en que orden?)
... no tengo mucho conocimiento al detalle del evento Query Close, las funciones, caracteristicas del mismo
y las cosas que se puede realizar dentro.. si puedes y no es mucha molestia quisiera una pequena explicacion
de el (xej que quiere decir: "Cancel = CloseMode = vbFormControlMenu"??
y como hacer que este codigo se ejecute solo cuando el usuario presione determinados botones?)



__ 2 __
ah y la aclaracion que me pedias con respecto a:
Pero este codigo hace que cuando el administrador intente acceder a las hojas con el boton que les comentaba
(que unicamente contiene el famoso 'unload me').
Con este texto me referia a que al utilizar mi codigo:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Application.DisplayFullScreen = False
Worksheets("Hoja1").Visible = xlSheetVeryHidden
Worksheets("Hoja2").Visible = xlSheetVeryHidden
Worksheets("Hoja3").Visible = xlSheetVeryHidden
Unload Me
ThisWorkbook.Close SaveChanges:=True '*
Application.Quit '*
End Sub

y presionar cualquiera de los botones de salir (en el formulario 1 tengo un boton cancelar
y en el 2 uno de Salir cuyos codigos son iguales.. contienen "unload me"
y los correspondientes al cierre de la aplicacion [que marque con un *]...
se diferencian con un 3er boton que se encuentra en el formulario 2 pues
este ultimo solo puede ser visualizado por un usuario administrador y contiene solamente el codigo "unload me"
puesto que mi intencion es que con este se cierre el formulario unicamente y al administrador no se le cierre el libro
de tal manera que pueda ver las hojas del mismo y hacer operaciones sobre ellas) simplemente la aplicacion se cierra
y no quiero que esto le ocurra al administrador.
Respuesta Responder a este mensaje
#4 Luis
24/12/2008 - 18:18 | Informe spam
Gracias por tú respuesta Héctor... Te cuento que lamentablemente luego
de ingresar un usuario y clave válidos en el primer formulario y
habiendo escrito en el evento terminate del formulario lo siguiente:

Private Sub UserForm_Terminate()
Application.DisplayFullScreen = False
Worksheets("BASE").Visible = xlSheetVeryHidden
Worksheets("VISTA").Visible = xlSheetVeryHidden
Worksheets("BANCO").Visible = xlSheetVeryHidden
Unload Me
Application.Quit
ThisWorkbook.Close SaveChanges:=True
End Sub

Simplemente el libro y la aplicación se cierran.. la solución (aunq no
me gusta mucho porq el formulario 1 queda abierto) sería quitar del
código que expongo a continuación (y que se encuentra en un botón
Aceptar dentro del primer formulario) la línea que contiene "Unload
me"

Private Sub cmdAceptar_Click()

If frmInicio.cmbUsuario.ListIndex > -1 And frmInicio.txtPassword.Text
<> "" Then

If (el usuario y clave son válidos) Then
Unload Me '*
frmCotizador.Show
Else
MsgBox "Usuario o clave incorrecta", vbCritical
frmInicio.cmbUsuario.ListIndex = -1
frmInicio.txtPassword.Text = ""
End If

Else
MsgBox "Debe ingresar toda la información requerida", vbCritical,
"Error"
End If

End Sub

Agradezco mucho tu atención y recomendaciones.


Saludos!!
Respuesta Responder a este mensaje
#5 Luis
24/12/2008 - 18:46 | Informe spam
Héctor adicionalmente a esto... si inhabilito el código "Unload me" y
al presionar el botón CommandButton3 (de tu ejemplo) que le permite al
administrador ver las hojas y código del libro, la aplicación y el
libro se cierran, cuando como te explique en mis mensajes anteriores
esa no era mi intención =(

Gracias nuevamente!
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida