Als je formulieren opent dan is het fraai dat deze altijd gecentreerd weergegeven worden binnen het applicatie window. Als je Excel bijvoorbeeld opent op een 2e scherm en je opent de VBA-editor op scherm 1 dan kan het voorkomen dat een formulier ergens halverwege deze 2 schermen wordt weergegeven. Ook is het mooi dat formulieren automatisch schuifbalk(en) krijgen als het formulier groter is dan het applicatie window. Je kunt bij formulieren standaard de schuifbalk(en) aanzetten, maar dat ziet er niet fraai uit als het scherm groot genoeg is. De schuifbalk(en) worden in dat geval dan uitgegrijsd weergegeven op het formulier en dat is erg lelijk.
Onderstaande code zorgt ervoor dat formulieren altijd automatisch gecentreerd weergegeven worden in het applicatie window en ook worden automatisch horizontale en/of verticale schuifbalken toegevoegd wanneer dat nodig is.
Public Sub CenterFormAndSetScrollBars(frm As Object)
With frm
.StartUpPosition = 0
.ScrollBars = fmScrollBarsNone
If .Width < Application.Width Then
.Left = Application.Left + 0.5 * Application.Width - 0.5 * .Width
Else
.ScrollBars = fmScrollBarsHorizontal
If .ScrollWidth = 0 Then
.ScrollWidth = .Width
.ScrollLeft = 0
End If
.Left = Application.Left
.Width = Application.Width
End If
If .Height < Application.Height Then
.Top = Application.Top + 0.5 * Application.Height - 0.5 * .Height
Else
If .ScrollBars = fmScrollBarsHorizontal Then
.ScrollBars = fmScrollBarsBoth
Else
.ScrollBars = fmScrollBarsVertical
End If
.ScrollHeight = .Height
.ScrollTop = 0
.Top = Application.Top
.Height = Application.Height
End If
End With
End Sub
Deze code kan aangeroepen worden in het formulier bij de UserForm_Initialize of UserForm_Activate gebeurtenis:
Private Sub UserForm_Initialize()
CenterFormAndSetScrollBars Me
End Sub
Als bij een het openen of activeren van een formulier dynamisch de afmeting van het formulier wordt aangepast, dan moet CenterFormAndSetScrollBars aangeroepen worden na deze aanpassing.
Dus niet:
Private Sub UserForm_Initialize()
CenterFormAndSetScrollBars Me
Me.Width = 100
End Sub
Maar:
Private Sub UserForm_Initialize()
Me.Width = 100
CenterFormAndSetScrollBars Me
End Sub
De code zorgt er ook voor dat de schuifbalken altijd gepositioneerd staan in de uitgangspositie. Dus helemaal naar links en helemaal bovenaan. Maar toch kan het voorkomen dat bij het openen van het formulier de schuifbalken anders gepositioneerd zijn. Dat komt omdat na de UserForm_Initialize gebeurtenis er voor gezorgd wordt dat de control die op dat moment de focus heeft altijd in beeld is. Dus als dat bijvoorbeeld een button is die normaal buiten beeld is, dan worden de schuifbalken automatisch zodanig ingesteld dat deze button in beeld is. Je kunt dit gedrag voorkomen door gebruik te maken van de UserForm_Activate gebeurtenis.
Vragen / suggesties
Hopelijk heeft dit artikel geholpen bij het automatisch centreren en instellen van schuifbalken van VBA formulieren. Als er verdere vragen over dit onderwerp zijn of suggesties voor verbetering, plaats dan een reactie hieronder.