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.