Please Note: This article is written for users of the following Microsoft Word versions: 2007, 2010, 2013, 2016, 2019, 2021, and Word in Microsoft 365. 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: Checking for Matching Parentheses.
Written by Allen Wyatt (last updated September 7, 2024)
This tip applies to Word 2007, 2010, 2013, 2016, 2019, 2021, and Word in Microsoft 365
Unless you are writing very short documents, cleaning up can be one of the hardest parts of writing. The following macro double-checks your document, paragraph by paragraph, to determine if you have a balanced number of parentheses. The macro counts the number of left parentheses in each paragraph of your document and makes sure you have the same number of right parentheses. If you don't, the macro inserts a paragraph before the unbalanced paragraph indicating the error.
Sub CheckParens()
Dim WorkPara As String
Dim CheckP() As Boolean
Dim NumPara As Integer, J As Integer
Dim LeftParens As Integer, RightParens As Integer
Dim MsgText As String
Dim OpenChar As String
Dim CloseChar As String
OpenChar = "("
CloseChar = ")"
MsgText = "***Unbalanced parens in the next paragraph"
NumPara = ActiveDocument.Paragraphs.Count
ReDim CheckP(NumPara)
For J = 1 To NumPara
CheckP(J) = False
WorkPara = ActiveDocument.Paragraphs(J).Range.Text
If Len(WorkPara) <> 0 Then
LeftParens = CountChars(WorkPara, OpenChar)
RightParens = CountChars(WorkPara, CloseChar)
If LeftParens <> RightParens Then CheckP(J) = True
End If
Next J
For J = NumPara To 1 Step -1
If CheckP(J) Then
Selection.HomeKey Unit:=wdStory, Extend:=wdMove
If J > 1 Then
Selection.MoveDown Unit:=wdParagraph, _
Count:=(J - 1), Extend:=wdMove
End If
Selection.InsertParagraphBefore
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.Style = "Normal"
Selection.TypeText Text:=MsgText
End If
Next J
End Sub
Private Function CountChars(A As String, C As String) As Integer
Dim Count As Integer
Dim Found As Integer
Count = 0
Found = InStr(A, C)
While Found <> 0
Count = Count + 1
Found = InStr(Found + 1, A, C)
Wend
CountChars = Count
End Function
Note that there are actually two macros here. The CountChars function is called from within the main CheckParens macro. It is this latter macro (CheckParens) that is the one you should actually invoke on your document. When the macro is finished, you can search through the document, looking for the wording "***Unbalanced parens" to see where you may have problems.
Note, as well, that the way this macro is written, you could easily modify it to search for other "paired" characters. All you would need to do is change what is assigned to the OpenChar, CloseChar, and MsgText variables. For instance, if you wanted to check for unmatched brackets, you could change those variables in this way:
OpenChar = "["
CloseChar = "]"
MsgText = "***Unbalanced brackets in the next paragraph"
Note:
WordTips is your source for cost-effective Microsoft Word training. (Microsoft Word is the most popular word processing software in the world.) This tip (1018) applies to Microsoft Word 2007, 2010, 2013, 2016, 2019, 2021, and Word in Microsoft 365. You can find a version of this tip for the older menu interface of Word here: Checking for Matching Parentheses.
Do More in Less Time! An easy-to-understand guide to the more advanced features available in the Microsoft 365 version of Word. Enhance the quality of your documents and boost productivity in any field with this in-depth resource. Complete your Word-related tasks more efficiently as you unlock lesser-known tools and learn to quickly access the features you need. Check out Microsoft 365 Word For Professionals For Dummies today!
If you are using Word in Draft view, and the text on the screen doesn't wrap at the right margin like it should, the ...
Discover MoreA common editing task is to transpose two adjacent words, so that their order is changed. While the task is common, there ...
Discover MoreIf you have two characters in the wrong order, you might be interested in a shortcut you can use to switch their order. ...
Discover MoreFREE SERVICE: Get tips like this every week in WordTips, a free productivity newsletter. Enter your address and click "Subscribe."
2024-09-08 07:08:40
Dori Schmetterling
Thank you, Tomek.
Now I see it.
My next challenge: how to deploy a macro; never done it before but, I am hopeful, I'll manage :-)
2024-09-08 06:15:56
sandeep
Kiwerry, please give me details.
sandeepkothari2010@gmail.com
2024-09-07 19:57:13
Tomek
@Dori Schmetterling
Read the tip again, the last paragraph and the following code has your answer.
May be Allen added it after you read it in reaction to your comment.
🦋
2024-09-07 08:37:39
Dori Schmetterling
Can I get this to work for brackets? I quite often open a bracket but forget to insert the closing bracket.
Thanks.
2024-09-07 06:15:36
Kiwerry
Thanks very much for a useful tool, Allen.
I modified it slightly by adding a couple of lines to inform the user how many problematical paragraphs had been found, and telling him/her how to locate them. If any reader wants details, add a comment here.
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