How can I resize a table to fit the page's width?

Article contributed by Daryl Lucas, Dave Rado and Suzanne S. Barnhill

Word 2000

In Word 2000 you can select Table + Properties, click on the preferred width checkbox; where it says Measure in, change it to percent, and in the width spinbox, type 100%. The relative column widths are preserved in the resized table.

Or if you want to do it programmatically, you can use:

Selection.Tables(1).PreferredWidthType = wdPreferredWidthPercent
Selection.Tables(1).PreferredWidth = 100

Word 97

In Word 97, you can select the entire table, and on the Column tab of Table | Cell Height and Width, type "a" and press the down arrow. The box will fill with the word Auto; OK out, and the table is resized to the margin width. Unfortunately (unlike Word 2000), the columns in the resized table are all equal widths.

Alternatively, if you click in any cell (with nothing selected) and follow the same procedure, the column which the insertion point is in will be resized so that the table fits the page margins – without the other column widths being affected. 

If you want to preserve the relative column widths when you resize the table, (as one generally does), you'll need a macro to do the job:

Sub MakeTableFitPageSize()

Dim myTable As Table
Dim OriginalRange As Range
Dim oRow As Row
Dim oCell As Cell
Dim UsableWidth As Single
Dim TableWidth As Single
Dim CellNo As Long

If Selection.Tables.Count = 0 Then
    MsgBox "Please put your cursor inside a table and try again", vbInformation
    Exit Sub
End If

Application.ScreenUpdating = False
System.Cursor = wdCursorWait

Set OriginalRange = Selection.Range
Set myTable = Selection.Tables(1)

myTable.Rows.SetLeftIndent _
        LeftIndent:=0, RulerStyle:=wdAdjustNone

'Calculate usable width of page

With ActiveDocument.PageSetup
    UsableWidth = .PageWidth - .LeftMargin - .RightMargin
End With

'Calculate width of top row, on assumption this will be
'the same as table width

On Error Resume Next

For
CellNo = 1 To myTable.Rows(1).Cells.Count

    If Err = 5991 Then
        MsgBox "This macro doesn't work with tables that have vertically merged cells", _
                vbInformation
        GoTo CleanUp
    Else If Err Then
        MsgBox Err.Description, vbInformation
        GoTo CleanUp
    End If

    TableWidth = TableWidth + myTable.Rows(1).Cells(CellNo).Width
Next CellNo

On Error Goto 0

'Calculate and assign width of each cell in each row, such that the cell width relative
'to the table's width stays the same as before. Do it for each row individually rather than
'for a column at a time- otherwise the macro won't work
'if any of the rows contain horizontally merged cells 

For Each oRow In myTable.Rows

    For Each oCell In oRow.Cells
        oCell.Width = (oCell.Width) * (UsableWidth / TableWidth)
    Next oCell

Next oRow

OriginalRange.Select

Cleanup:
     'Clear variables from memory
    
Set  myTable = Nothing
     Set  OriginalRange = Nothing
     Set  oRow = Nothing
     Set  oCell = Nothing
     UsableWidth = 0
     TableWidth = 0
     CellNo = 0

     System.Cursor = wdCursorNormal
     Application.ScreenUpdating = True

End Sub