Applying a consistent style to every section of a long Word document manually takes too long and invites errors. Word VBA macros let you automate the application of paragraph styles, character styles, and list styles across all sections with one command. This article explains how to write and run a VBA macro that loops through each section and applies a specified style to every paragraph or selected range. You will learn the core objects — Sections, Paragraphs, and Style — and see ready-to-use code examples.
Key Takeaways: Automating Style Application With Word VBA
- ActiveDocument.Sections.Count and For Each sec In ActiveDocument.Sections: Loop through every section in the document without manual selection.
- sec.Range.Paragraphs and .Style = wdStyleHeading1: Apply a built-in or custom style to all paragraphs within a single section in one macro pass.
- Application.ScreenUpdating = False: Speed up the macro and prevent screen flicker when processing hundreds of paragraphs across many sections.
Why Use VBA to Apply Styles Across Sections
Word documents with multiple sections often have inconsistent formatting because each section can have its own page layout, headers, and style definitions. Manually selecting each section and applying a style is tedious and error-prone. VBA macros eliminate repetition by using the Sections collection, which contains every section in the document. The macro iterates through each section, accesses its Range.Paragraphs collection, and assigns a style to every paragraph in that range. This approach works for built-in styles like Heading 1, Normal, and custom styles you have created.
Before writing the macro, enable the Developer tab in Word. Go to File > Options > Customize Ribbon and check Developer. Open the VBA editor by pressing Alt+F11. Insert a new module by clicking Insert > Module. All code examples below go into that module.
Prerequisites for Running VBA Macros
Your document must be saved in a macro-enabled format. Use File > Save As and choose Word Macro-Enabled Document (.docm). If the document is a .docx, the macro will run but you cannot save the code unless you convert the file. Set macro security to allow signed or trusted macros: go to File > Options > Trust Center > Trust Center Settings > Macro Settings and select Enable all macros (not recommended for untrusted sources) or add your macro project to the trusted locations list.
Step-by-Step Macro to Apply a Style to All Paragraphs in Every Section
The following macro applies a built-in style named wdStyleHeading1 to every paragraph in every section. Replace the style constant with any built-in style name or a string for a custom style.
- Open the VBA Editor and Insert a New Module
Press Alt+F11 to open the VBA editor. In the Project Explorer, right-click Normal or your project name and choose Insert > Module. A blank code window opens. - Declare the Sub Procedure and Variables
Type the following code to start the macro and declare a section object and a paragraph object:Sub ApplyStyleToAllSections()
Dim sec As Section
Dim para As Paragraph - Loop Through Each Section
Add aFor Eachloop that iterates throughActiveDocument.Sections:For Each sec In ActiveDocument.Sections - Loop Through Each Paragraph in the Section
Inside the section loop, add a second loop to go through all paragraphs in the section range:For Each para In sec.Range.Paragraphs
para.Style = wdStyleHeading1
Next para - Close Both Loops and End the Sub
After the paragraph loop, typeNext secthenEnd Sub. The complete macro looks like this:Sub ApplyStyleToAllSections()
Dim sec As Section
Dim para As Paragraph
For Each sec In ActiveDocument.Sections
For Each para In sec.Range.Paragraphs
para.Style = wdStyleHeading1
Next para
Next sec
End Sub - Run the Macro
Close the VBA editor. Press Alt+F8, select ApplyStyleToAllSections, and click Run. All paragraphs in all sections become Heading 1 style.
Applying a Custom Style by Name
If you have a custom style called “ReportBody”, replace wdStyleHeading1 with a string: para.Style = "ReportBody". Built-in style constants like wdStyleNormal or wdStyleBodyText also work. Use the Object Browser in VBA (F2) to search for wdStyle constants.
Refining the Macro for Specific Sections or Paragraph Ranges
The basic macro applies a style to every paragraph. You can modify it to target only the first paragraph of each section, skip empty paragraphs, or apply different styles to different sections.
Apply Style Only to the First Paragraph of Each Section
Use sec.Range.Paragraphs(1).Style to target only the first paragraph. This is useful for section titles.
Skip Empty Paragraphs
Add an If condition inside the paragraph loop:If Len(para.Range.Text) > 1 Then
para.Style = wdStyleHeading1
End If
This avoids applying a heading style to blank lines.
Apply Different Styles by Section Index
Use sec.Index to identify the section number. For example, set section 1 to Heading 1 and section 2 to Normal:
If sec.Index = 1 Then
para.Style = wdStyleHeading1
ElseIf sec.Index = 2 Then
para.Style = wdStyleNormal
End If
Common Mistakes and Macro Performance Tips
“The macro runs but nothing changes”
The style name or constant might be misspelled. Verify the exact style name in the Styles pane. For built-in styles, use the VBA constant, not a string. If you use a string, enclose it in double quotes. Check that the document is not protected. Go to Review > Restrict Editing and stop protection if needed.
“The macro is very slow on a long document”
Word updates the screen after each style change. Disable screen updating at the start of the macro and re-enable it at the end:
Application.ScreenUpdating = False
' ... your loops ...
Application.ScreenUpdating = True
“The macro applies the style to headers and footers”
The sec.Range property excludes headers and footers by default. To include them, use sec.Headers(wdHeaderFooterPrimary).Range.Paragraphs. Be careful because headers often need different formatting.
“I get a runtime error 5941: The requested member of the collection does not exist”
This occurs when you reference a section index that does not exist. Use ActiveDocument.Sections.Count to check the total number of sections before looping.
VBA Style Application Methods: Constant vs String vs Object
| Item | Built-in Constant (e.g., wdStyleHeading1) | String Name (e.g., “Heading 1”) | Style Object (e.g., ActiveDocument.Styles(“Heading 1”)) |
|---|---|---|---|
| Syntax | para.Style = wdStyleHeading1 | para.Style = “Heading 1” | para.Style = ActiveDocument.Styles(“Heading 1”) |
| Case sensitivity | Not applicable | Case-insensitive | Case-insensitive |
| Works with custom styles | No | Yes | Yes |
| Performance | Fastest | Fast | Slightly slower due to object lookup |
| Risk of error | Low — compile-time check | Medium — typo causes runtime error | Medium — style must exist |
Use the built-in constant when applying a standard style like Normal or Heading 1. Use the string name for custom styles. Use the Style object only when you need to access properties of the style itself, such as its font or paragraph formatting.
Conclusion
You can now write a VBA macro that applies any paragraph style to every section in a Word document. Start with the simple loop using For Each sec In ActiveDocument.Sections and refine it to skip empty paragraphs or target specific sections. For large documents, always disable screen updating with Application.ScreenUpdating = False to improve speed. To go further, explore the Find object to apply styles only to paragraphs that contain specific text, such as all paragraphs that start with the word “Chapter”.