Finding Unused Styles

by Allen Wyatt
(last updated August 15, 2015)

1

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
            Else
                iStyUDCount = iStyUDCount + 1
                sUserDef(iStyUDCount) = styItem.NameLocal
            End If
        End If
    Next styItem
    
    'Now create the output document
    Documents.Add
    
    Selection.TypeText "Styles In Use"
    Selection.TypeParagraph
    For J = 1 To iStyIUCount
        Selection.TypeText sInUse(J)
        Selection.TypeParagraph
    Next J
    Selection.TypeParagraph
    Selection.TypeParagraph
    
    Selection.TypeText "Built-in Styles Not In Use"
    Selection.TypeParagraph
    For J = 1 To iStyIUCount
        Selection.TypeText sBuiltIn(J)
        Selection.TypeParagraph
    Next J
    Selection.TypeParagraph
    Selection.TypeParagraph
    
    Selection.TypeText "User-defined Styles Not In Use"
    Selection.TypeParagraph
    For J = 1 To iStyIUCount
        Selection.TypeText sUserDef(J)
        Selection.TypeParagraph
    Next J
    Selection.TypeParagraph
    Selection.TypeParagraph
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. ...

MORE FROM ALLEN

Closing All Open Workbooks

Excel provides a handy (but little-known) shortcut for closing all the workbooks you have open. This tip explains how easy it ...

Discover More

Last Non-Zero Value in a Row

If you have a lot of values in a single row, you might want to pull the last non-zero value from that row. There are a ...

Discover More

Changing the Color Inside a Shape

Adding a shape to your workbook is easy. If you want to fill the shape with a color, you'll want to follow the information ...

Discover More

Do More in Less Time! Are you ready to harness the full power of Word 2013 to create professional documents? In this comprehensive guide you'll learn the skills and techniques for efficiently building the documents you need for your professional and your personal life. Check out Word 2013 In Depth today!

More WordTips (menu)

Style Names Can Affect Style Definitions

Most people think that you can name styles almost anything you want. You can, but there may be some unintended consequences ...

Discover More

Listing All Styles in the Style Drop-Down List

Want to see all the built-in styles in the Style drop-down list? Here's the quick way to do it.

Discover More

Renaming a Style

Styles are invaluable when it comes to applying consistent formatting in and across documents. If you need to rename a style ...

Discover More
Subscribe

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

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. Maximum image size is 8Mpixels. 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 7 - 2?

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?

Thanks.

Mike


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
Subscribe

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.