Finding Unused Styles

by Allen Wyatt
(last updated August 15, 2015)


The capability to create and manage styles is one of the strong features of Word. Styles allow you to quickly and easily apply consistent formatting throughout your document, and update that formatting as your needs change.

Word provides quite a few built-in (predefined) styles, and you can add more as your needs dictate. At some time you might want to determine which styles are not in use in a document. This list could then be used to determine which styles you could easily delete, simply because they are no longer needed.

There is no intrinsic way to create an unused style list in Word. Instead, you need to create a macro to do the job for you. You might think that creating such a macro would be a simple task of looking at which styles Word believes are in use, and then comparing those to the styles which are defined. The problem with this approach is that VBA's InUse property (which applies to Style objects) is used for several purposes. The official definition for the InUse property is that it's True if either of the following two conditions are met:

  • The style is a built-in style that has been modified or applied in the document.
  • The style is a user-defined style that has been created in the document.

What that means is that the InUse property doesn't indicate if a style is actually in use in the document. You could do something to the definition of a style without actually applying it, and that style would be flagged as 'in use' even though there isn't any text in the document actually using the style.

However, it is possible to generate a list of styles not in use by using both the InBuilt and InUse properties in a macro. The following VBA macro uses this approach:

Sub CreateStyleList()
    Dim docThis As Document
    Dim styItem As Style
    Dim sBuiltIn(499) As String
    Dim iStyBICount As Integer
    Dim sUserDef(499) As String
    Dim iStyUDCount As Integer
    Dim sInUse(499) As String
    Dim iStyIUCount As Integer
    Dim iParCount As Integer
    Dim J As Integer, K As Integer
    Dim sParStyle As String
    Dim bInUse As Boolean
    ' Ref the active document
    Set docThis = ActiveDocument
    ' Collect all styles being used
    iStyIUCount = 0
    iParCount = docThis.Paragraphs.Count
    iParOut = 0
    For J = 1 To iParCount
        sParStyle = docThis.Paragraphs(J).Style
        For K = 1 To iStyIUCount
            If sParStyle = sInUse(K) Then Exit For
        Next K
        If K = iStyIUCount + 1 Then
            iStyIUCount = K
            sInUse(iStyIUCount) = sParStyle
        End If
    Next J
    iStyBICount = 0
    iStyUDCount = 0
    ' Check out styles that are "in use"
    For Each styItem In docThis.Styles
        'see if in those being used
        bInUse = False
        For J = 1 To iStyIUCount
            If styItem.NameLocal = sInUse(J) Then bInUse = True
        Next J
        'Add to those not in use
        If Not bInUse Then
            If styItem.BuiltIn Then
                iStyBICount = iStyBICount + 1
                sBuiltIn(iStyBICount) = styItem.NameLocal
                iStyUDCount = iStyUDCount + 1
                sUserDef(iStyUDCount) = styItem.NameLocal
            End If
        End If
    Next styItem
    'Now create the output document
    Selection.TypeText "Styles In Use"
    For J = 1 To iStyIUCount
        Selection.TypeText sInUse(J)
    Next J
    Selection.TypeText "Built-in Styles Not In Use"
    For J = 1 To iStyIUCount
        Selection.TypeText sBuiltIn(J)
    Next J
    Selection.TypeText "User-defined Styles Not In Use"
    For J = 1 To iStyIUCount
        Selection.TypeText sUserDef(J)
    Next J
End Sub

The macro first examines every paragraph in the document to determine the names of the styles actually being used in the document. This information is stored in the sInUse array. Then, the macro starts looking through the list which Word thinks are in use--these are the styles that belong to the Styles collection. If the style is not in the sInUse array, then it is added either to the sBuiltIn array (for built-in styles) or the sUserDef array (for user-defined styles). When the comparisons are done, a new document is created that lists the results.

WordTips is your source for cost-effective Microsoft Word training. (Microsoft Word is the most popular word processing software in the world.) This tip (1488) applies to Microsoft Word 97, 2000, 2002, and 2003.

Author Bio

Allen Wyatt

With more than 50 non-fiction books and numerous magazine articles to his credit, Allen Wyatt is an internationally recognized author. He  is president of Sharon Parq Associates, a computer and publishing services company. ...


Repeating In a Macro

Macros are often used to process information stored in documents. Usually the processing involves some sort of iterative ...

Discover More

Missing Page Break Indicator

Enter a page break in Word, and that page break may not appear on the screen as you expect it to appear. This has to do with ...

Discover More

Errors when Copying References to External Cells

If you copy a cell that contains a reference to external data, do you get an error? It could be due to the complexity of the ...

Discover More

Learning Made Easy! Quickly teach yourself how to format, publish, and share your content using Word 2013. With Step by Step, you set the pace, building and practicing the skills you need, just when you need them! Check out Microsoft Word 2013 Step by Step today!


Deleting Styles

As documents evolve, so do your needs for various styles. You may create new ones and, invariably, old ones need to be ...

Discover More

Word Freezes when Updating Styles

If you have problems with Word freezing at times, it can be very frustrating. Here are a couple of things you can check out ...

Discover More

Intelligently Starting a New Paragraph

When using styles in a document, you can increase your productivity by letting Word know what paragraph style you expect to ...

Discover More

FREE SERVICE: Get tips like this every week in WordTips, a free productivity newsletter. Enter your address and click "Subscribe."

View most recent newsletter.

Comments for this tip:

If you would like to add an image to your comment (not an avatar, but an image to help in making the point of your comment), include the characters [{fig}] in your comment text. You’ll be prompted to upload your image when you submit the comment. Images larger than 600px wide or 1000px tall will be reduced. Up to three images may be included in a comment. All images are subject to review. Commenting privileges may be curtailed if inappropriate images are posted.

What is three minus 1?

2016-04-01 12:47:18

Michael Virostko

Hi Allen,

I like this VBA code but it will not search headers and footers. I also have multiple sections.

Is there any change to the code for this?



This Site

Got a version of Word that uses the menu interface (Word 97, Word 2000, Word 2002, or Word 2003)? This site is for you! If you use a later version of Word, visit our WordTips site focusing on the ribbon interface.

Newest Tips

FREE SERVICE: Get tips like this every week in WordTips, a free productivity newsletter. Enter your address and click "Subscribe."

(Your e-mail address is not shared with anyone, ever.)

View the most recent newsletter.

Links and Sharing