Please Note: This article is written for users of the following Microsoft Word versions: 2007, 2010, 2013, and 2016. If you are using an earlier version (Word 2003 or earlier), this tip may not work for you. For a version of this tip written specifically for earlier versions of Word, click here: Comments in Text Boxes.
Written by Allen Wyatt (last updated December 13, 2023)
This tip applies to Word 2007, 2010, 2013, and 2016
Text boxes are great for many things, but adding comments is not one of them. Word won't allow you to add comments to text within a text box, as you can to regular text in your document.
If you absolutely must have comments in your text boxes, there are two possible solutions. The first is to work around it by just adding hidden text in the text box. You can make the hidden text visible or invisible, as the need arises. The second potential solution is to not use text boxes, but use frames.
Frames have been available in Word for longer than text boxes. They provide basically the same capabilities, but there are some differences. One of the differences is that you can add comments to text within frames. To convert a text box to a frame, follow these steps if you are using Word 2007:

Figure 1. The Text Box tab of the Format Text Box dialog box.
You can now add comments to the text in the frame.
If you are using Word 2010 or a later version of Word, the above steps won't work. Microsoft has removed the capability to convert a text box into a frame. You can still add frames, but you can't convert. (To add frames you need to customize the Quick Access Toolbar or the ribbon to add the Insert Frame or Insert Frame Horizontal commands.) Why Microsoft removed this conversion capability is a mystery.
WordTips is your source for cost-effective Microsoft Word training. (Microsoft Word is the most popular word processing software in the world.) This tip (10193) applies to Microsoft Word 2007, 2010, 2013, and 2016. You can find a version of this tip for the older menu interface of Word here: Comments in Text Boxes.
Create Custom Apps with VBA! Discover how to extend the capabilities of Office 365 applications with VBA programming. Written in clear terms and understandable language, the book includes systematic tutorials and contains both intermediate and advanced content for experienced VB developers. Designed to be comprehensive, the book addresses not just one Office application, but the entire Office suite. Check out Mastering VBA for Microsoft Office 365 today!
If you would like to add non-printing notes to your document, the Comments feature is one way of doing that. Here's how ...
Discover MoreWant to change the name that Word associates with various comments previously added to your document? Here are some ideas ...
Discover MoreComments or notes are often added to documents to aid in their development. You can use regular editing techniques to ...
Discover MoreFREE SERVICE: Get tips like this every week in WordTips, a free productivity newsletter. Enter your address and click "Subscribe."
2026-01-12 14:30:17
J. Woolley
My earlier comments below describe RegExp in Function Top10Words2. RegExp defines \w as a word metacharacter equivalent to [A-Za-z0-9_]; however, English dictionaries say words are built from letters, hyphen, and apostrophe, or [A-Za-z-']. Therefore, the following statement in Top10Words2
RegEx.Pattern = "(\w+)" '\w is the same as [A-Za-z0-9_]
should be replaced by
RegEx.Pattern = "([A-Za-z-']+)"
For related discussion, see my recent comment here:
https://excelribbon.tips.net/T011792_Returning_the_Final_Word.html
2026-01-11 15:06:23
J. Woolley
Re. my most recent comment below, here's another way to handle ties. In the original version of Function Top10Words2, replace these statements
For n = 1 To k
Result(n, 1) = Words(n - 1) 'unique word (case ignored)
Result(n, 2) = Uniq.Item(Words(n - 1)) 'unique word count
Next n
Top10Words2 = Result
with the following statements:
Dim j As Long 'initially zero
For n = 1 To k
If j < Uniq.Count Then
Result(n, 1) = Uniq.Item(Words(j)) 'unique word count
Result(n, 2) = Words(j) 'unique word (case ignored)
j = j + 1
Do While j < Uniq.Count
If Uniq.Item(Words(j)) <> Result(n, 1) Then Exit Do
Result(n, 2) = Result(n, 2) & ", " & Words(j)
j = j + 1
Loop
Else
Result(n, 1) = vbNullString
Result(n, 2) = vbNullString
End If
Next n
Top10Words2 = Result
This change combines all the words with equal frequency count into a comma separated group. Notice frequency count is now in the 1st column and words are in the 2nd. The 1st column will no longer contain duplicate count values. You might want to format the 2nd column as Wrap Text.
2026-01-09 12:03:09
J. Woolley
One issue for a list of the top 10 words is how to handle ties; i.e., what if there are more words with the same frequency as the 10th word in the list. Here's a solution for the Top10Words2 function described in my previous two comments below. Replace the final statement
Top10Words2 = Result
with the following statements:
If Uniq.Count > 10 Then 'add words with tied Uniq.Item
For n = k + 1 To Uniq.Count
If Uniq.Item(Words(n - 1)) < Result(k, 2) Then Exit For
Result(k, 1) = Result(k, 1) & ", " & Words(n - 1)
Next n
End If
Top10Words2 = Result
This change combines the 10th word in the list with a comma separated group of additional words that have the same frequency. You might want to format that cell as Wrap Text.
2026-01-08 15:46:07
J. Woolley
Sorry. I forgot to format the function. Here's a prettier version:
Function Top10Words2(Target As Variant) As Variant
'Early binding requires VBE > Tools > References: _
Microsoft Scripting Runtime _
Microsoft VBScript Regular Expressions
Dim Uniq As New Dictionary, Ignor As New Dictionary
Dim RegEx As New RegExp, expr As Match, n As Long, k As Long
Dim cell As Variant, word As Variant, Words As Variant, Result As Variant
Const SKIP As String = "the,and,of,to,a,in,for,on,at,with,is,it,this," _
& "that,as,be,by,an,or,from,was,were,are,but,not,so,if,then,than," _
& "too,can,could,would,should,has,have,had,do,does,did,will,shall," _
& "may,might,must,also,just,about,into,out,up,down,over,under," _
& "again,still,only" 'consider adjusting this list
For Each word In Split(SKIP, ",")
Ignor.Add Key:=word, Item:=Null
Next word
RegEx.Global = True
RegEx.Multiline = True
RegEx.IgnoreCase = True
RegEx.Pattern = "(\w+)" '\w is the same as [A-Za-z0-9_]
For Each cell In Target
If RegEx.Test(cell) Then
For Each expr In RegEx.Execute(cell)
word = LCase(CStr(expr)) 'ignore case
If Uniq.Exists(word) Then
Uniq.Item(word) = Uniq.Item(word) + 1
ElseIf Not Ignor.Exists(word) Then
Uniq.Add Key:=word, Item:=1
End If
Next expr
End If
Next cell
Words = Uniq.Keys 'base-0 array
For n = 0 To UBound(Words) - 1 'bubble-sort Uniq.Items descending
For k = n + 1 To UBound(Words)
If Uniq.Item(Words(k)) > Uniq.Item(Words(n)) Then
word = Words(k)
Words(k) = Words(n)
Words(n) = word
End If
Next k
Next n
k = Uniq.Count
If k > 10 Then k = 10
ReDim Result(1 To k, 1 To 2) 'k rows, 2 columns
For n = 1 To k
Result(n, 1) = Words(n - 1) 'unique word (case ignored)
Result(n, 2) = Uniq.Item(Words(n - 1)) 'unique word count
Next n
Top10Words2 = Result
End Function
2026-01-08 15:38:56
J. Woolley
Here's an alternate version of the Tip's macro as a user-defined function (UDF) that returns a dynamic array with 10 rows (or less) and 2 columns (word and count). Dictionary and RegExp are more efficient than Collection and Mid. Early binding requires using VB Editor's Tools menu to Reference both Microsoft Scripting Runtime and Microsoft VBScript Regular Expressions libraries. Target can be a cell range (contiguous or not) or an array. If there are no words in Target, #VALUE! error is returned. Like the Tip's macro, text is converted to lower case. This function counts words containing letters (a-z), numbers (0-9), and underscore(_); any other character is a word separator. But the Tip's macro separates words by the space character and only considers words containing letters (a-z); non-letters are simply eliminated from a word, so a hyphenated word like non-letter becomes nonletter and a word like Top10Words2 becomes topwords.
Function Top10Words2(Target As Variant) As Variant
'Early binding requires VBE > Tools > References: _
Microsoft Scripting Runtime _
Microsoft VBScript Regular Expressions
Dim Uniq As New Dictionary, Ignor As New Dictionary
Dim RegEx As New RegExp, expr As Match, n As Long, k As Long
Dim cell As Variant, word As Variant, Words As Variant, Result As Variant
Const SKIP As String = "the,and,of,to,a,in,for,on,at,with,is,it,this," _
& "that,as,be,by,an,or,from,was,were,are,but,not,so,if,then,than," _
& "too,can,could,would,should,has,have,had,do,does,did,will,shall," _
& "may,might,must,also,just,about,into,out,up,down,over,under," _
& "again,still,only" 'consider adjusting this list
For Each word In Split(SKIP, ",")
Ignor.Add Key:=word, Item:=Null
Next word
RegEx.Global = True
RegEx.Multiline = True
RegEx.IgnoreCase = True
RegEx.Pattern = "(\w+)" '\w is the same as [A-Za-z0-9_]
For Each cell In Target
If RegEx.Test(cell) Then
For Each expr In RegEx.Execute(cell)
word = LCase(CStr(expr)) 'ignore case
If Uniq.Exists(word) Then
Uniq.Item(word) = Uniq.Item(word) + 1
ElseIf Not Ignor.Exists(word) Then
Uniq.Add Key:=word, Item:=1
End If
Next expr
End If
Next cell
Words = Uniq.Keys 'base-0 array
For n = 0 To UBound(Words) - 1 'bubble-sort Uniq.Items descending
For k = n + 1 To UBound(Words)
If Uniq.Item(Words(k)) > Uniq.Item(Words(n)) Then
word = Words(k)
Words(k) = Words(n)
Words(n) = word
End If
Next k
Next n
k = Uniq.Count
If k > 10 Then k = 10
ReDim Result(1 To k, 1 To 2) 'k rows, 2 columns
For n = 1 To k
Result(n, 1) = Words(n - 1) 'unique word (case ignored)
Result(n, 2) = Uniq.Item(Words(n - 1)) 'unique word count
Next n
Top10Words2 = Result
End Function
If your version is earlier than Excel 2021, select an empty 10x2 range and use Ctrl+Shift+Enter for a CSE array formula like {=Top10Words2(A1:A999)}.
Got a version of Word that uses the ribbon interface (Word 2007 or later)? This site is for you! If you use an earlier version of Word, visit our WordTips site focusing on the menu interface.
Visit the WordTips channel on YouTube
FREE SERVICE: Get tips like this every week in WordTips, a free productivity newsletter. Enter your address and click "Subscribe."
Copyright © 2025 Sharon Parq Associates, Inc.
Comments