Como quitar la x de userform en excel

Pues eso como se puede quitar la x de un user form para que no se cierre dándola...

3 respuestas

Respuesta
4

Te paso la solución:

En primer lugar programaremos un botón del formulario para salir de él.

(Dibuja un botón en el formulario y le adjudicas esta macro)

Private Sub CommandButton1_Click()
Application.EnableEvents = False
Unload Me
Application.EnableEvents = True

Y ahora programaremos el evento queryclose del form para impedir que se pulse la x rojoa del formulario:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
MsgBox "debe abandonar el formulario pulsando el botón correcto"
Cancel = 1
End If
End Sub

De esta manera cuando el usuario pulse la x le dirá que debe abandonar el forma de forma adecuada pulsando el botón creado a tal efecto.

hola muchas gracias...lo que busco es su sesaparicion.....o crear un formulario de entrada con otro control....aunque reconozco que es una mania quizás.....muchas gracias

La x no se puede desaparecer, solo se puede anular como ya te he indicado, pero si la anulamos tenemos que tener otra via de salida que es el botón que te he explicado también. Si no pusiéramos ese botón no podríamos salir nunca.

Respuesta

Y a esta nueva salida como le puedo poner un MsgBox que pregunte si puedo salir o no, ya con la por anulada lo eh intentado con esto pero no me funciona. En que estaré fallando

Private Sub Form_Unload(Cancel As Integer)
If (MsgBox("¿Esta seguro de salir?", vbCritical + vbYesNo) = vbYes) Then
    End
Else
   Cancel = 1
End If
End Sub
Respuesta

En tu pregunta anterior Elsa te paso la macro para eliminar la POR del formulario, ¿no entiendo porque sigues insistiendo con lo mismo?

Sorry amigo te confundí con otra persona que hizo la misma pregunta esta es la solución que le dio Elsa:

Otra opción sería quitar ese botón 'x' de este modo:

Insertá un módulo y allí copiá las siguientes líneas (atención con el comentario)

Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Public Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
Public Const GWL_STYLE As Long = -16&
Public Const WS_SYSMENU As Long = &H80000
'quitar el texto PtrSafe si se trabaja con 32bits

Luego en el formulario tendrás un botón de comando para salir como el que te mostré antes.

Y en el evento Initialize del userform coloca estas líneas:

Private Sub UserForm_Initialize()
Dim hWnd As Long
Dim lngWstyle As Long
hWnd = FindWindow(vbNullString, Me.Caption)
lngWstyle = GetWindowLong(hWnd, GWL_STYLE)
SetWindowLong hWnd, GWL_STYLE, lngWstyle And (Not WS_SYSMENU)
DrawMenuBar hWnd
'el resto de tus instrucciones para este evento, si tuvieras.
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas