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

#6 Héctor Miguel
27/12/2008 - 03:13 | Informe spam
hola, Luis !

la idea de mover los codigos al evento '_terminate' "era" por si la aplicacion era tambien indistinta
ya que la instruccion "unload <form>" dispara el evento (por lo que es "pareja" sin importar quien lo cierra)

la propuesta de los tres botones "era" para que en el boton de cada usuario estuviera el codigo aplicable
(en lugar de los cuadros de mensaje deberias poner los codigos:
- CommandButton1 (cierre del libro para los usuarios normales)
- CommandButton2 (cierre del libro y salida de la aplicacion para los usuarios normales)
- CommandButton3 (cierre del form SIN cerrar el libro NI salir de la aplicacion que SOLO puede "ver" el administrador ?)
o sea algo +/- como lo siguiente:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = CloseMode = vbFormControlMenu
End Sub
Private Sub CommandButton1_Click() ' cierra el libro (usuarios normales) '
Unload Me
ThisWorkbook.Close True
End Sub
Private Sub CommandButton2_Click() ' cierra el libro y sale de excel (usuarios normales) '
Unload Me
Application.Quit
ThisWorkbook.Close True
End Sub
Private Sub CommandButton3_Click() ' solo cierra el formulario (administrador) '
Unload Me
End Sub

saludos,
hector.

__ OP __
... luego de ingresar un usuario y clave validos 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 aplicacion se cierran.. la solucion (aunq no me gusta mucho porq el formulario 1 queda abierto)
seria quitar del codigo que expongo a continuación (y que se encuentra en un boton Aceptar dentro del primer formulario)
la linea 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
Respuesta Responder a este mensaje
#7 Luis
30/12/2008 - 00:05 | Informe spam
Disculpa Héctor,.. lo que me dices es exactamente lo que había hecho
(colocar los códigos dentro de cada botón) pero teniedo en cuenta que
en el formulario 2 están el CommandButton2 y el CommandButton3_Click
() , si a ese formulario le coloco el código que describí arriba en el
evento terminate, no importa cual botón presione (siendo
administrador) igual ambos hacen que se cierre el libro y se salga de
la aplicación por la instrucción unload me. Siendo así el
administrador no puede ver el libro porq siempre se le cierra.


Muchas Gracias!


Saludos!
Respuesta Responder a este mensaje
#8 Héctor Miguel
30/12/2008 - 03:36 | Informe spam
hola, Luis !

... lo que me dices es exactamente lo que habia hecho (colocar los codigos dentro de cada boton)
pero teniedo en cuenta que en el formulario 2 estan el CommandButton2 y el CommandButton3_Click()
si a ese formulario le coloco el codigo que describi arriba en el evento terminate
no importa cual boton presione (siendo administrador) igual ambos hacen que se cierre el libro
y se salga de la aplicacion por la instruccion unload me.
Siendo asi el administrador no puede ver el libro porq siempre se le cierra.



si manejas un "tipo de salida" para cada usuario y cada uno con su boton (como en el ejemplo del mensaje anterior)...
no debes usar codigo en el evento '_terminate' (y es asi como trate de que fuera entendido al inicio del mensaje) -?-

saludos,
hector.
Respuesta Responder a este mensaje
#9 Luis
30/12/2008 - 17:11 | Informe spam
Muchas Gracias.. Disculpa por tanta molestia de mi parte Héctor...
Funciona muy bien!

Saludos y excelentes fiestas!!!
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida