Home

MacOffice

Set the Arrange All menu command to tile windows vertically

The default behavior of the Word Window/Arrange All menu command is to tile windows horizontally with the windows stacked on top of each other.

Like all Word commands, however, you can modify the behavior of the menu item by creating a macro that overrides the default behavior. The following macro, when placed in a global template (the Normal template for most users) will tile all windows vertically, side-by-side, instead.

The macro first generates a new collection of all the visible windows. It then calculates the required window widths and heights. I've put in constants to force some space on the bottom (cnBOTTOMSPACE) and the right (cnRIGHTSPACE) in order to access the desktop. You can, of course, change the bottom and right space constants to suit. The collection is then cycled through, arranging the windows vertically.

Again, put the macro in a regular module of a global template (also known as an add-in). Or download an add-in containing the code.

    '**************************************************************************
    'Purpose:   Modify Windows/Arrange All command to tile windows vertically
    'Inputs:    None. Change cnBOTTOMSPACE and cnRIGHTSPACE to suit
    'Returns:   None
    'Results:   Visible windows are tiled vertically, leaving cnBOTTOMSPACE pixels
    '           of desktop visible at the bottom, and cnRIGHTSPACE pixels of desktop
    '           visible on the right.
    'Revisions: Rev 0 (JEM) (20030907) published in microsoft.public.mac.office.word newsgroup.
    '           Rev 1 (JEM) (20030908) added line to prevent error when all windows minimized.
    '           Rev 2 (JEM) (20040116) removed Windowstate command (N/A Macintosh).
    'Tested:    OS X: Word 2004, Word v.X; Classic: Word 2001, Word 98
    '**************************************************************************
    Public Sub WindowArrangeAll()
        'By J.E. McGimpsey
        'http://www.mcgimpsey.com/macoffice/word/verticalwindows.html
        Const cnBOTTOMSPACE As Integer = 25
        Const cnRIGHTSPACE As Integer = 50
        Dim colVisibleWindows As New Collection
        Dim wnMyWindow As Window
        Dim i As Integer
        Dim nWidth As Integer
        Dim nHeight As Integer
        
        For Each wnMyWindow In Windows
            If wnMyWindow.WindowState <> wdWindowStateMinimize Then _
                colVisibleWindows.Add wnMyWindow
        Next wnMyWindow
        With colVisibleWindows
            If .Count <> 0 Then
                nWidth = (Application.UsableWidth - cnRIGHTSPACE) / .Count
                nHeight = Application.UsableHeight - cnBOTTOMSPACE
                For i = 1 To .Count
                    With .Item(i)
                        .Width = nWidth
                        .Left = (i - 1) * nWidth - (i > 1)
                        .Top = 0
                        .Height = nHeight
                    End With
                Next i
            Else
                System.Cursor = wdCursorNormal
            End If
        End With
    End Sub

Valid XHTML 1.1 Valid CSS Made on a Macintosh

Quick Links

What's an add-in?

Download the add-in Vertical_Arrange_All containing this macro.