A Macro for Commonly Confused Words

 

A Macro For Commonly Confused Words

By C.K. MacLeod

Updated July 30, 2015

Thanks to Eliza Dee for suggesting a tweak that makes this macro even better (see the comments below for details)! The macro script has been updated.

Adverse or averse? Assent or ascent? English contains many words that are easily confused—words that sound the same, but have different meanings and spellings.

Tackle potential confusables when it's time to edit your writing. The macro below will highlight commonly confused words in just minutes. After you run the macro, check the highlighted words to see if you've used them correctly. Refer to this list to look up any words you're unsure of.

Tip for editors: use this macro to make potential confusables stand out during a first pass.

Quick Steps

  1. Copy and paste the macro into Word's VBA.
  2. Run the macro on your writing.
  3. Remove highlighting from words as you check them.

Sub Confusables()
' Highlights confusables
'
' Written by Roger Mortis, revised Subcortical, Jami Gold, C.K. MacLeod and Eliza Dee; word list, Commonly Confused Words by Oxford Dictionaries http://www.oxforddictionaries.com/words/commonly-confused-words
'
Dim range As range
Dim i As Long
Dim TargetList
TargetList = Array("accept", "except", "adverse", "averse", "advice", "advise", "affect", "effect", "aisle", "isle", "altogether", "all together", "along", "a long", "aloud", "allowed", "altar", "alter", "amoral", "immoral", "appraise", "apprise", "assent", "ascent", "aural", "oral", "awhile", "a while", "balmy", "barmy", "bare", "bear", "bated", "baited", "bazaar", "bizarre", "birth", "berth", "born", "borne", "bow", "bough", "break", "brake", "broach", "brooch", "canvas", "canvass", "censure", "censor", "cereal", "serial", "chord", "cord", "climactic", "climatic", "coarse", "course")
For i = 0 To UBound(TargetList)
Set range = ActiveDocument.range
With range.Find
.Text = TargetList(i)
.Format = True
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = True
Do While .Execute(Forward:=True) = True
range.HighlightColorIndex = wdViolet
Loop
End With
Next

Dim TargetList1
TargetList1 = Array("complacent", "complaisant", "complement", "compliment", "council", "counsel", "cue", "queue", "curb", "kerb", "currant", "current", "defuse", "diffuse", "desert", "dessert", "discreet", "discrete", "disinterested", "uninterested", "draught", "draft", "draw", "drawer", "duel", "dual", "elicit", "illicit", "ensure", "insure", "envelop", "envelope", "exercise", "exorcise", "fawn", "faun", "flair", "flare", "flaunt", "flout", "flounder", "founder", "forbear", "forebear", "forward", "foreword", "freeze", "frieze", "grisly", "grizzly", "hoard", "horde", "imply", "infer", "loathe", "loath")
For i = 0 To UBound(TargetList1)
Set range = ActiveDocument.range
With range.Find
.Text = TargetList1(i)
.Format = True
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = True
Do While .Execute(Forward:=True) = True
range.HighlightColorIndex = wdViolet
Loop
End With
Next

Dim TargetList2
TargetList2 = Array("lose", "loose", "meter", "metre", "militate", "mitigate", "palate", "palette", "pedal", "peddle", "poll", "pole", "pour", "pore", "practice", "practise", "prescribe", "proscribe", "principle", "principal", "sceptic", "septic", "sight", "site", "stationary", "stationery", "story", "storey", "titillate", "titivate", "tortuous", "torturous", "wreath", "wreathe")
For i = 0 To UBound(TargetList2)
Set range = ActiveDocument.range
With range.Find
.Text = TargetList2(i)
.Format = True
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = True
Do While .Execute(Forward:=True) = True
range.HighlightColorIndex = wdViolet
Loop
End With
Next
End Sub


After you've addressed each highlighted word, use Paul Beverley's free UnHighlight macro to remove highlights, one instance at a time.

Not sure what a macro is? See this post for an explanation.

Learn how to use macros with this free 20-minute macro course. You can run macros in Microsoft Word or WPS Writer (pro version).

*The lists of words in this macro are from the Oxford Dictionaries website.

Image by Dvortygirl

11 thoughts on “A Macro for Commonly Confused Words”

  1. Fab macro, Corina, though readers may want to add new target lists that incorporate the words given but with different suffixes. For example, the macro will pick up compliment/complement, but not complemented/complimented or complements/compliments. Not sure if there's a quick way to amend the script so that it doesn't just look for whole words. If you know of a workaround, please let us know!

    1. That's a great idea, Louise! You could enter the various forms of the word into the macro, but I suspect there's a more elegant way to indicate suffixes. I'll need to dig into some macro code to figure it out. Thanks for bringing this to my attention.

    2. Louise,
      Eliza Dee has come up with a tweak that allows for different suffixes. I've updated the macro to include this tweak.

  2. Thanks for this awesome macro! I've just been trying to figure out how to do something similar and this will save me tons of time! Since this just got linked to by The Book Designer and will probably get a bunch of new visitors as a result, I feel justified in necro-ing the comments section by responding to Louise here--even if she's got it sorted out by now, someone else may want to know the answer. If you change the parameter:

    .MatchAllWordForms = False

    to

    .MatchAllWordForms = True

    this seems to take care of the issue in most cases. With the modification, the macro found "loathed," "practicing," "practiced," "metered," "metering," "palates," "peddling," "polled" and "stationaries"--the only one it didn't find in my test list was "metred" and while it found "discreetly," for some reason it only highlighted the "discreet" part of it.

    The macro also has the parameters:

    .MatchWholeWord = True
    .MatchWildcards = False

    If you changed them to accept wildcards and to look at parts of words, you might get slightly better results also.

    1. Eliza,
      I've updated the macro to include your .MathAllWordForms = True tweak. Thank you for that! This macro is truly a community effort. (I've added your name to the list of contributors in the macro script.) I haven't had a chance to test .MatchWholeWord = False and .MatchWildcards = True, but if anyone has tried those tweaks, I'd be happy to hear what they've learned.

      1. You're welcome--glad to help! At some point I hope to have time to flesh out the list with more entries, and to mess around with wildcards and partial words, and if I do I'll come back and share that, too.

  3. Please help! This sounds like a really useful tool but I've encountered a problem while trying to run the Confusables macro. I get a run time error '5610' with the following message "the Find What text for a Find All Word Forms search can only contain alphabetic letters." I am brand new to macros in Word and don't know how to begin to fix this.

    1. Louise,
      Many things could cause a runtime error. See What is a Runtime Error in Microsoft Word for details. What version of Word are you running? Sometimes, updating your version of Word to a newer version can help with runtime errors.

      Does this error pop up only when you're running the Confusables macro? You could try removing the Confusables macro from Word's VBA (that's the "program" in Word that you added the macro to) and try the FRedit macro instead.

      Are you running any other macros or add-ins in Word? You could try disabling them to see if they're the cause of the runtime error. This article, while a bit techy, may help: https://support.microsoft.com/en-us/kb/555220

Leave a Reply

Your email address will not be published. Required fields are marked *