VBA Tutorials

VBA: Format Word Tables in 5 Easy Steps (2025 Update)

Tired of manual formatting? Learn to automate Word table styling with our 5-step VBA guide. Master borders, shading, alignment, and more. Updated for 2025!

D

Daniel Peterson

Microsoft Certified Expert specializing in VBA and Office automation for over 15 years.

6 min read3 views

Introduction: Why Automate Table Formatting?

Manually formatting tables in Microsoft Word is a tedious, soul-crushing task. You click, drag, right-click, and navigate through endless menus, only to have your layout break the moment you add a new row. If you manage multiple documents or generate reports, ensuring consistent table styling is a constant battle. This is where Visual Basic for Applications (VBA) becomes your secret weapon.

By using a simple VBA script, you can format any table to your exact specifications in seconds. This not only saves you countless hours but also guarantees professional, uniform branding across all your documents. This guide, fully updated for 2025, will walk you through formatting Word tables using VBA in five straightforward steps. Whether you're a complete beginner or looking to refine your automation skills, you'll find everything you need to become a Word automation pro.

Prerequisites for This Tutorial

Before we dive in, make sure you have the following:

  • Microsoft Word (2016, 2019, 2021, or Microsoft 365): The code is generally backward-compatible, but we're focusing on modern versions.
  • Developer Tab Enabled: If you don't see the 'Developer' tab in your Word ribbon, go to File > Options > Customize Ribbon and check the 'Developer' box.
  • A Word document with at least one table: You need something to practice on!

Step 1: Accessing Your Word Table with VBA

You can't format a table you can't find. The first step in any Word VBA task is to create an object reference to the element you want to manipulate. For tables, you have a few options.

The most common method is to reference a table by its index number. The tables in a document are indexed in the order they appear.

Sub SelectFirstTable()
    ' Declare a variable to hold your table object
    Dim tbl As Table

    ' Check if there are any tables in the document
    If ActiveDocument.Tables.Count > 0 Then
        ' Set the variable to the first table in the document
        Set tbl = ActiveDocument.Tables(1)

        ' (Optional) Select the table to confirm it's the right one
        tbl.Select
    Else
        MsgBox "No tables found in this document."
    End If
End Sub

For the rest of this tutorial, we will assume you have set a Table object variable named tbl using the method above. All subsequent code snippets will work on this tbl object.

Step 2: The Quick Win - Applying a Built-in Style

The fastest way to get a great-looking table is to apply one of Word's built-in table styles. These are the same styles you see in the "Table Design" tab. With VBA, you can apply them with a single line of code.

The Style property is your friend here. You just need to provide the name of the style as a string.

Sub ApplyTableStyle()
    Dim tbl As Table

    If ActiveDocument.Tables.Count > 0 Then
        Set tbl = ActiveDocument.Tables(1)

        ' Apply a professional-looking style
        ' Common styles: "Table Grid", "Light Shading Accent 1", "Grid Table 4 - Accent 1"
        tbl.Style = "Grid Table 5 Dark - Accent 1"

        ' You can also turn on/off style options
        tbl.ApplyStyleFirstColumn = True
        tbl.ApplyStyleHeadingRows = True
        tbl.ApplyStyleLastRow = False
    End If
End Sub

This is fantastic for speed and consistency, but what if you need a truly custom look that isn't in the style gallery? That's where the next steps come in.

Step 3: Deep Dive into Custom Borders and Shading

For complete control, we need to format the table element by element. This gives you unlimited flexibility to match any corporate branding guide.

Taming Table Borders

The Borders property gives you access to every line in the table. You can modify the entire table's borders or target specific ones like the inside or outside borders.

Sub FormatBorders()
    Dim tbl As Table
    If ActiveDocument.Tables.Count = 0 Then Exit Sub
    Set tbl = ActiveDocument.Tables(1)

    ' First, let's set the outside border
    With tbl.Borders(wdBorderTop)
        .LineStyle = wdLineStyleSingle
        .LineWidth = wdLineWidth150pt ' 1.5 pt
        .Color = wdColorAutomatic
    End With
    ' Repeat for Bottom, Left, and Right...
    tbl.Borders(wdBorderBottom).LineWidth = wdLineWidth150pt
    tbl.Borders(wdBorderLeft).LineWidth = wdLineWidth150pt
    tbl.Borders(wdBorderRight).LineWidth = wdLineWidth150pt

    ' Now, let's format the inside borders differently
    With tbl.Borders(wdBorderHorizontal)
        .LineStyle = wdLineStyleDot
        .LineWidth = wdLineWidth050pt ' 0.5 pt
        .Color = wdColorGray50
    End With
    With tbl.Borders(wdBorderVertical)
        .LineStyle = wdLineStyleDot
        .LineWidth = wdLineWidth050pt
        .Color = wdColorGray50
    End With
End Sub

Mastering Cell Shading

Shading helps differentiate header rows and make data more readable. You can apply shading to the entire table, a single row, or even a single cell. A common task is to shade the header row.

Sub FormatShading()
    Dim tbl As Table
    If ActiveDocument.Tables.Count = 0 Then Exit Sub
    Set tbl = ActiveDocument.Tables(1)

    ' Shade the first row (header row)
    ' RGB function provides access to any color
    tbl.Rows(1).Shading.BackgroundPatternColor = RGB(68, 114, 196)

    ' You can also make the text in that row white for contrast
    tbl.Rows(1).Range.Font.Color = wdColorWhite
    tbl.Rows(1).Range.Font.Bold = True
End Sub

Step 4: Perfecting Alignment and Spacing

A well-aligned table with proper spacing looks clean and is easy to read. VBA gives you precise control over both horizontal and vertical alignment, as well as cell padding (internal margins).

Row and Cell Alignment

You can set the horizontal alignment for the entire table or specific rows, and the vertical alignment for individual cells.

Sub FormatAlignment()
    Dim tbl As Table
    If ActiveDocument.Tables.Count = 0 Then Exit Sub
    Set tbl = ActiveDocument.Tables(1)

    ' Center the entire table on the page
    tbl.Rows.Alignment = wdAlignRowCenter

    ' Vertically center the content in all cells
    tbl.Range.Cells.VerticalAlignment = wdCellAlignVerticalCenter

    ' Left-align the first column, and center the rest
    Dim i As Long
    For i = 1 To tbl.Rows.Count
        ' First column left-aligned
        tbl.Cell(i, 1).Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
        ' Other columns center-aligned
        If tbl.Columns.Count > 1 Then
            For j = 2 To tbl.Columns.Count
                tbl.Cell(i, j).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
            Next j
        End If
    Next i
End Sub

Adjusting Cell Padding (Margins)

Cell padding adds whitespace between the cell content and the cell border, drastically improving readability.

Sub FormatPadding()
    Dim tbl As Table
    If ActiveDocument.Tables.Count = 0 Then Exit Sub
    Set tbl = ActiveDocument.Tables(1)

    ' Set uniform padding for the whole table (in points)
    tbl.TopPadding = InchesToPoints(0.05)
    tbl.BottomPadding = InchesToPoints(0.05)
    tbl.LeftPadding = InchesToPoints(0.1)
    tbl.RightPadding = InchesToPoints(0.1)

    ' This is a property of the table, not individual cells in Word VBA
End Sub

Step 5: AutoFitting for a Professional Look

Finally, ensure your table fits perfectly on the page. The AutoFitBehavior method adjusts column widths based on the content or the window size.

  • wdAutoFitContent: Adjusts column widths to fit the text. Best for tables with varying content length.
  • wdAutoFitWindow: Stretches the table to fit the width of the page or text column.
  • wdAutoFitFixed: Disables auto-fitting, allowing you to set fixed column widths manually.
Sub FormatAutoFit()
    Dim tbl As Table
    If ActiveDocument.Tables.Count = 0 Then Exit Sub
    Set tbl = ActiveDocument.Tables(1)

    ' Example 1: Fit to content
    tbl.AutoFitBehavior wdAutoFitContent

    ' Example 2: Fit to page width
    ' tbl.AutoFitBehavior wdAutoFitWindow

    ' Example 3: Set fixed column widths (after disabling autofit)
    ' tbl.AutoFitBehavior wdAutoFitFixed
    ' tbl.Columns(1).SetWidth InchesToPoints(1.5), wdAdjustNone
    ' tbl.Columns(2).SetWidth InchesToPoints(2.5), wdAdjustNone
End Sub
Comparison of VBA Formatting Methods
Feature Table.Style Manual Formatting
Speed Extremely Fast Slower (more lines of code)
Customization Limited to pre-defined styles Total, granular control
Consistency Excellent, based on style definition Excellent, if script is well-written
Best For Quick, standard formatting jobs Complex, brand-specific designs

Putting It All Together: A Complete Script

Let's combine everything we've learned into one master macro that completely formats the first table in a document.

Sub MasterFormatActiveTable()
    On Error GoTo ErrorHandler
    Dim tbl As Table

    If ActiveDocument.Tables.Count = 0 Then
        MsgBox "No tables found.", vbInformation
        Exit Sub
    End If

    ' --- Step 1: Reference the Table ---
    Set tbl = ActiveDocument.Tables(1)

    With tbl
        ' --- Step 2 (Optional, we'll do manual): .Style = "Table Grid" ---

        ' --- Step 3: Borders & Shading ---
        .Borders.Enable = True ' Ensure borders are visible
        .Borders(wdBorderTop).LineWidth = wdLineWidth150pt
        .Borders(wdBorderBottom).LineWidth = wdLineWidth150pt
        .Borders(wdBorderLeft).LineWidth = wdLineWidth150pt
        .Borders(wdBorderRight).LineWidth = wdLineWidth150pt
        .Borders(wdBorderHorizontal).LineStyle = wdLineStyleDot
        .Borders(wdBorderVertical).LineStyle = wdLineStyleNone ' Hide vertical lines
        
        ' Header row formatting
        With .Rows(1)
            .Shading.BackgroundPatternColor = RGB(47, 85, 151)
            .Range.Font.Color = wdColorWhite
            .Range.Font.Bold = True
            .Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
        End With

        ' --- Step 4: Alignment & Spacing ---
        .Rows.Alignment = wdAlignRowCenter
        .Range.Cells.VerticalAlignment = wdCellAlignVerticalCenter
        .TopPadding = InchesToPoints(0.03)
        .BottomPadding = InchesToPoints(0.03)
        .LeftPadding = InchesToPoints(0.1)
        .RightPadding = InchesToPoints(0.1)

        ' --- Step 5: Autofitting ---
        .AutoFitBehavior wdAutoFitWindow
    End With

    MsgBox "Table formatting complete!", vbInformation
    Exit Sub

ErrorHandler:
    MsgBox "An error occurred: " & Err.Description, vbCritical
End Sub

Conclusion: Your Path to Word Automation

You now have the fundamental building blocks to programmatically format any table in Microsoft Word. By moving from built-in styles to granular control over borders, shading, and alignment, you can build powerful macros that save time and enforce consistency. Start by modifying these scripts for your own reports and documents. The more you practice, the more you'll discover what's possible with Word VBA.