
The Anchorage
Personal website of Gregory K. Maxey, Commander USN (Retired)
The information, illustrations and code contained in my "Microsoft Word Tips" are provided free and without risk or obligation.
However, the work is mine. If you use it for commercial purposes or benefit from my efforts through income earned or time saved then a donation, however small, will help to ensure the continued availability of this resource.
If you would like to donate, please use the appropriate donate button to access PayPal. Thank you!
This Microsoft Word Tips & Microsoft Word Help page introduces and publishes a VBA procedure which provides a fast and simple means to count the number of times a selected word or phrase occurs in your document.

While I've include the procedure below, you can download a .dot template file that includes the code and a simple user interface: Count Occurrences.
The template includes a single command button interface control as shown below.


Note: Custom menus and toolbars created in Word 2003 templates or documents automatically propagate to the Add-Ins tab in Word 2007/2010.
Sub TextCountQuick()
'Counts current word or selected word/string.
Dim rngStory As Range
Dim strPhrase As String
Dim i As Long
Dim oShp As Word.Shape
System.Cursor = wdCursorWait
'If there is no selection, select current word.
With Selection
If .Type <> wdSelectionNormal Then Selection.Words(1).Select
'Unselect any empty space, line breaks and paragraph marks after text.
.MoveEndWhile cset:=" ", Count:=wdBackward
.MoveEndWhile cset:=Chr(13), Count:=wdBackward
.MoveEndWhile cset:=Chr(11), Count:=wdBackward
strPhrase = .Text
End With
'Reset F/R parameters
With ActiveDocument.Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = ""
.Replacement.Text = ""
.Forward = True
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Wrap = wdFindStop
End With
'Find and count.
For Each rngStory In ActiveDocument.StoryRanges
'Iterate through all linked stories
Do
With rngStory.Find
.Text = strPhrase
Do While .Execute
i = i + 1
Loop
End With
Select Case rngStory.StoryType
Case 6, 7, 8, 9, 10, 11
On Error GoTo Err_Handler
If rngStory.ShapeRange.Count > 0 Then
For Each oShp In rngStory.ShapeRange
If oShp.TextFrame.HasText Then
With oShp.TextFrame.TextRange.Find
.Text = strPhrase
Do While .Execute
i = i + 1
Loop
End With
End If
Next
End If
Case Else
'Do Nothing
End Select
Err_ReEntry:
On Error GoTo 0
'Get next linked story (if any)
Set rngStory = rngStory.NextStoryRange
Loop Until rngStory Is Nothing
Next
If strPhrase = Chr(13) Then strPhrase = "The paragraph mark"
If strPhrase = Chr(11) Then strPhrase = "The linebreak"
If strPhrase = Chr(9) Then strPhrase = "The tab character"
Select Case i
Case 1
MsgBox """" & strPhrase & """ occurs " & i & " time in the document.", , "Text Count"
Case Is > 1
MsgBox """" & strPhrase & """ occurs " & i & " times in the document", , "Text Count"
End Select
System.Cursor = wdCursorNormal
Exit Sub
Err_Handler:
Resume Err_ReEntry:
End Sub
Additional content.
See: Installing Macros for instructions on how to set up and use the macros provided in this Microsoft Word Help & Microsoft Word Tips page.
That's it! I hope you have found this tips page useful and informative.
The information, illustrations and code contained in my "Microsoft Word Tips" are provided free and without risk or obligation.
However, the work is mine. If you use it for commercial purposes or benefit from my efforts through income earned or time saved then a donation, however small, will help to ensure the continued availability of this resource.
If you would like to donate, please use the appropriate donate button to access PayPal. Thank you!