wijzig taal:

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.

arrow_up