Centre controls on the screen

Your Access forms might be running on all sorts of different computers with different sizes of screen. The controls might look good when you design the form but they'll all be crowded on the left-hand side if the user maximises the form on a larger screen.

The code below is my preferred solution. I've kept it simple by restricting the user's choices and making the following assumptions:

  • The form always runs maximised.
  • The user can't minimize or resize the form.
  • Controls stay the same size.
  • Controls are only centred horizontally.

Put this code in the form's Open method:

Private Sub Form_Open(Cancel As Integer)
   Dim intOrigWidth As Integer
   Dim intOffSet As Integer

   '-- Remember the original width of the form
   '-- so that we can calculate the offset required.

   intOrigWidth = Me.WindowWidth
   intOffset = (Me.WindowWidth - intOrigWidth) / 2

   '-- Freeze the screen to prevent flickering
   '-- whilst we rearrange the screen.

   Me.Painting = False
   For Each ctl In Me.Controls
     ctl.Left = ctl.Left + intOffset
   Next ctl

   '-- Show all the changes at once
   Me.Painting = True
End Sub

Set the following properties:

  • Dividing Lines = No.
  • Border Style = None.
  • Min Max buttons = No.

You will end up with a form that looks like something this with the group of controls centred at the top of the screen:

[Controls centred in an Access screen]


A better solution would be to write much more code to resize the controls as the user changes the size of the form. This gets difficult because some controls (like textboxes) must stay the same height whereas others (like listboxes) must get larger as the form gets taller. Restricting myself to horizontal movement kept it simple.

If the form includes containers like Tabbed Controls or Option Groups then you'll need to add extra code to handle them. Use the ControlType property inside the loop to detect these controls.