Quitar el borde y el cerrar de un formulario de Excel

Estoy practicando en Excel y me encontré el siguiente código que oculta los bordes y la opción cerrar pero no se por que no oculta los bordes de Excel.

Tengo un sistema operativo de 64 bits, o sera que falta habilitar una librería.

1 respuesta

Respuesta
1

[Hola

Mencionas un Userform pero luego mencionas los bordes del Excel ¿qué intentas hacer en realidad? Ojo, tu código está declarado para solo ser útil en Excel de 64 bits, no confundir eso con tener un sistema operativo de 64 bits. ¿No será que tu Office sí es de 32 bits? Verifica.

Mi idea es de quitar el borde de un formulario, es decir quitar la opción de cerrar ya que

Como tal Excel no tiene una opción de deshabilitar los bordes de un formulario como lo realiza access. Y realice el cambio que observaste.

La idea esquitar el borde que solo quede como un botón propio para cerrar.

[Hola

Como te dije, parece que tu Office es de 32 bits, por ende lo que tienes no va a funcionar.

En un archivo nuevo, inserta un Userform, y en su módulo pega esto:

Option Explicit
#If VBA7 Then
    Private Declare PtrSafe Function FindWindow Lib "user32" _
        Alias "FindWindowA" ( _
            ByVal lpClassName As String, _
                ByVal lpWindowName As String) As Long
    Private Declare PtrSafe Function SetWindowLong Lib "user32" _
        Alias "SetWindowLongA" ( _
            ByVal hwnd As Long, _
                ByVal nIndex As Long, _
                    ByVal dwNewLong As Long) As Long
    Private Declare PtrSafe Function GetWindowLong Lib "user32" _
        Alias "GetWindowLongA" ( _
            ByVal hwnd As Long, _
                ByVal nIndex As Long) As Long
    Private Declare PtrSafe Function SetWindowPos Lib "user32" ( _
        ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
            ByVal x As Long, ByVal y As Long, _
                ByVal cx As Long, ByVal cy As Long, _
                    ByVal wFlags As Long) As Long
#Else
    Private Declare Function FindWindow Lib "user32" _
        Alias "FindWindowA" ( _
            ByVal lpClassName As String, _
                ByVal lpWindowName As String) As Long
    Private Declare Function SetWindowLong Lib "user32" _
        Alias "SetWindowLongA" ( _
            ByVal hwnd As Long, _
                ByVal nIndex As Long, _
                    ByVal dwNewLong As Long) As Long
    Private Declare Function GetWindowLong Lib "user32" _
        Alias "GetWindowLongA" ( _
            ByVal hwnd As Long, _
                ByVal nIndex As Long) As Long
    Private Declare Function SetWindowPos Lib "user32" ( _
        ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
            ByVal x As Long, ByVal y As Long, _
                ByVal cx As Long, ByVal cy As Long, _
                    ByVal wFlags As Long) As Long
#End If
Private Const GWL_STYLE = (-16)
Private Const WS_CAPTION = &HC00000
Private Const WS_BORDER = &H800000
Private Enum ESetWindowPosStyles
    SWP_SHOWWINDOW = &H40
    SWP_HIDEWINDOW = &H80
    SWP_FRAMECHANGED = &H20
    SWP_NOACTIVATE = &H10
    SWP_NOCOPYBITS = &H100
    SWP_NOMOVE = &H2
    SWP_NOOWNERZORDER = &H200
    SWP_NOREDRAW = &H8
    SWP_NOREPOSITION = SWP_NOOWNERZORDER
    SWP_NOSIZE = &H1
    SWP_NOZORDER = &H4
    SWP_DRAWFRAME = SWP_FRAMECHANGED
    HWND_NOTOPMOST = -2
End Enum
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
Dim FrmWndh  As Long
Dim lStyle As Long
Dim tR As RECT
Private Sub UserForm_Activate()
FrmWndh = FindWindow(vbNullString, Me.Caption)
lStyle = GetWindowLong(FrmWndh, GWL_STYLE)
lStyle = lStyle And Not WS_CAPTION
SetWindowLong FrmWndh, GWL_STYLE, lStyle
SetWindowPos FrmWndh, _
    0, tR.Left, tR.Top, _
        tR.Right - tR.Left, _
            tR.Bottom - tR.Top, _
                SWP_NOREPOSITION Or SWP_NOZORDER Or SWP_FRAMECHANGED Or WS_BORDER
Me.Repaint
End Sub
Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Unload UserForm1
End Sub

Nada más, solo eso como para que lo entiendas. El Userform aparecerá sin bordes y sin título y por ende sin el botón X de cerrar. Para cerrar el Userform basta darle doble clic en cualquier lado.

Cordial saludo ingeniero, estoy realizando el siguiente procedimiento pero no logro que los bordes se desahabiliten.

a continuación le muestro lo que estoy realizando paso a paso para validar donde estoy cometiendo el error.

doy clic derecho del formulario UserForm2 y pego el código que me envió.

Código ingresado.

creo ahora un modulo aparte para llamar el formulario con un boton que se encuentra en un libro de excel.

y este es el resultado a dar clic en el botón.

Pues sospecho que "algo" más dejaste en el módulo de tu Userform2. Mejor descarga esto:

https://drive.google.com/file/d/1JFgjAb_6Xu_VW7-KDNWeoQycJHi3QLJg/view?usp=sharing

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas