06-45.598553 contact@hpvl.nl

Titelbalk van VBA formulier verwijderen

GEPUBLICEERD: 24 DECEMBER 2020 LAATST BIJGEWERKT: 29 JANUARI 2021
Soms is het wenselijk om de gehele titelbalk van een formulier te verwijderen. Bijvoorbeeld bij het tonen van een zogenaamd ‘splash screen’ bij het opstarten van een applicatie of bij het tonen van een formulier met een voortgangsbalk. In deze gevallen kan het fraaier zijn om een formulier te gebruiken zonder titelbalk.

Titelbalk van formulier verwijderen

De VBA formulieren hebben standaard geen optie om de titelbalk te verwijderen, maar met behulp van de Windows API is kan dit wel gerealiseerd worden. De code hiervoor moet in een aparte module gezet worden en kan dan eenvoudig aangeroepen worden in een formulier waar de titelbalk verwijderd moet worden. De code die in de module gezet moet worden is als volgt:

Private Const GWL_STYLE = -16
Private Const WS_CAPTION = &HC00000

#If VBA7 Then
    Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
    #If Win64 Then
        Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongPtrA" (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr
        Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongPtrA" (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
    #Else
        Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr
        Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
    #End If
    Private Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hWnd As LongPtr) As Long
#Else
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) 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 DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
#End If

Public Sub HideFormTitleBar(frm As Object)
    #If VBA7 Then
        Dim lStyle As LongPtr, lFrmHandle As LongPtr
    #Else
        Dim lStyle As Long, lFrmHandle As Long
    #End If
    lFrmHandle = FindWindow("ThunderDFrame", frm.Caption)
    lStyle = GetWindowLong(lFrmHandle, GWL_STYLE)
    lStyle = lStyle And Not WS_CAPTION
    SetWindowLong lFrmHandle, GWL_STYLE, lStyle
    DrawMenuBar lFrmHandle
End Sub

Deze code werkt zowel in de 32 als in de 64 bits versie. De titelbalk van een formulier kan dan verwijderd worden door de volgende regel aan de UserForm_Initialize gebeurtenis toe te voegen:

Private Sub  UserForm_Initialize()
    HideFormTitleBar Me
End Sub

Dit kan als gezegd gebruikt worden voor een splash screen. Maak daarvoor een nieuw formulier aan en zet daarop de zaken die getoond moeten worden op het splash screen, zoals logo en naam van de applicatie. Noem dit formulier frmSplash. In Excel kan dit splash screen getoond worden door de volgende code in de Workbook_Open gebeurtenis van ThisWorkbook klassenmodule:

Private Sub Workbook_Open()
    ActiveWindow.Visible = False
    frmSplash.Show
    Windows(ThisWorkbook.Name).Visible  = True
End Sub

Als dit splash screen 5 seconden zichtbaar moet zijn, zet dan de volgende code in de UserForm_Activate gebeurtenis van het formulier:

Private Sub UserForm_Activate()
    Application.Wait (Now + TimeValue("00:00:05"))
    Unload Me
End Sub

Op deze manier wordt bij het opstarten van het Excel-bestand eerst 5 seconden het splash screen getoond, waarna het Excel bestand zichtbaar wordt.

Share This

Share This

Share this post with your friends!