How to generate Forms without title bar in VBA / Excel?

1

I need to work with some forms without the title bar in VBA / Excel.

I found many similar solutions, but all for 32 bits (mostly in older versions of VBA).

asked by anonymous 22.08.2016 / 23:37

1 answer

1

I found the solution on a national site and adapted it.

The reference I took for the form without the title bar (called by heading in the site) was: Know Excel .

Excel spreadsheet vba userform without header

I'll introduce the code with the solution:

Option Explicit

' Fonte: Saber Excel
'
' http://www.microsoftexcel.com.br/index.php/excel-dicas-microsoft-excel-vba/185-excel-vba-userforms-e-outros/1225-excel-planilha-vba-userform-sem-cabecalho.html

'======================================================================================================================================
' Retira o cabeçalho do Formulário completamente
'======================================================================================================================================

Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

Const GWL_STYLE = (-16)
Const WS_CAPTION = &HC00000
Const SWP_FRAMECHANGED = &H20

Private Declare Function FindWindowA Lib "user32" _
       (ByVal lpClassName As String, _
        ByVal lpWindowName As String) _
     As Long

Private Declare Function GetWindowRect Lib "user32" _
      (ByVal hwnd As Long, lpRect As RECT) _
     As Long

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
       (ByVal hwnd As Long, _
        ByVal nIndex As Long) _
     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 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

Sub RETIRAR_CABECALHO_SABEREXCEL(stCaption As String, sbxVisible As Boolean)
Dim vrWin As RECT
Dim style As Long
Dim lHwnd As Long
    lHwnd = FindWindowA(vbNullString, stCaption)
    GetWindowRect lHwnd, vrWin
    style = GetWindowLong(lHwnd, GWL_STYLE)
    If sbxVisible Then
        SetWindowLong lHwnd, GWL_STYLE, style Or WS_CAPTION
    Else
        SetWindowLong lHwnd, GWL_STYLE, style And Not WS_CAPTION
    End If
    SetWindowPos lHwnd, 0, vrWin.Left, vrWin.Top, vrWin.Right - vrWin.Left, _
                 vrWin.Bottom - vrWin.Top, SWP_FRAMECHANGED
End Sub


Private Sub UserForm_Initialize()

RETIRAR_CABECALHO_SABEREXCEL Me.Caption, False

End Sub


Private Sub ButtonSair_Click()

Unload Me

End Sub

As the form runs out of the title bar, you had to put a button to "exit" the form.

You can also close it with Alt + F4.

    
23.08.2016 / 01:11