I have tried using the macro below to create a listing of unused styles. This came from WordTips. This helps me when I am cleaning out a document that has 100s of styles. The problem is that when it gives me the three lists (styles used in document, built in styles not used, and user-defined styles not used) it seems to only give me 9 of each, even a document that has 170 styles (according to the Organizer [Format>Styles>Organizer command button]).
Can anyone see what this is only returning 9 values per list/array?
Thanks!!
Troy
P.S. How do you guys get your macro text to show up in these posts with the proper indents?
The full article is included below:
——————————
Finding Unused Styles
——————————
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.
(Thanks to Graham Smith, Gary Frieder, Gaetano J. Milano, Leonard
LaPadula, David J. Bookbinder, and Martyn Yeo for their contributions
to this tip.)