Loading
Word.Tips.Net WordTips (Menu Interface)

Finding Quoted Text in VBA

Please Note: This article is written for users of the following Microsoft Word versions: 97, 2000, 2002, and 2003. If you are using a later version (Word 2007 or later), this tip may not work for you. For a version of this tip written specifically for later versions of Word, click here: Finding Quoted Text in VBA.

Jennifer needs a way, in a macro, to find a string surrounded by either smart or straight quotes (or a mix of the two). She can't seem to find the proper mix of commands for the Find method to locate all instances of such text in all versions of Word.

It is important to be clear about what is being searched. The assumption in this tip is that your macro requires to you search for a specific string surrounded by quotes, not any string surrounded by quotes. For example, in a document that contains two quoted strings such as "my quoted text" and "more quoted text," you only want to find one of the strings for which you know the text, ahead of time, not both of the strings.

In this case, it is just fine to use the Find method, as you note. The question is how to accommodate the possibility of both smart quotes and straight quotes in what you seek. Fortunately, the Find method, by default, matches both straight and smart quotes interchangeably. The key point is knowing how to specify that you want the quote marks included in the search. The following code snippet should do the trick:

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = """my quoted text"""
    .Format = False
    .MatchWildcards = False
End With
Selection.Find.Execute

The key in this code is how information is assigned to the .Text property. Note that whatever you are searching for (in this case, "my quoted text") is surrounded by three quotes on each side. The reason for this is rather arcane: The string you are searching for must be enclosed with quote marks; this is required by VBA. This is shown here:

"my quoted text"

Since you want an actual quote character at the beginning of what you are seeking, you need to include a second quote mark as a "delimiter" to indicate you want to find the quote mark character. This means there are now three quote marks at the beginning:

"""my quoted text"

The same extra-quote-mark-as-delimiter technique also applies to the end of the string, so you end up with what is shown in the code snippet. When the code is executed, Word dutifully finds the string, surrounded by any mix of straight or smart quotes, as desired.

It should also be noted that this approach only works if you are doing a regular search, with the .MatchWildcards property set to False.

WordTips is your source for cost-effective Microsoft Word training. (Microsoft Word is the most popular word processing software in the world.) This tip (11638) applies to Microsoft Word 97, 2000, 2002, and 2003. You can find a version of this tip for the ribbon interface of Word (Word 2007 and later) here: Finding Quoted Text in VBA.

Related Tips:

Learning Made Easy! Quickly teach yourself how to format, publish, and share your content using Word 2013. With Step by Step, you set the pace, building and practicing the skills you need, just when you need them! Check out Microsoft Word 2013 Step by Step today!

 

Leave your own comment:

*Name:
Email:
  Notify me about new comments ONLY FOR THIS TIP
Notify me about new comments ANYWHERE ON THIS SITE
Hide my email address
*Text:
*What is 5+3 (To prevent automated submissions and spam.)
 
 
           Commenting Terms

Comments for this tip:

Ken Endacott    30 Apr 2012, 17:32
Correction to previous posting.

The line:
aRange.End = aWord.End - 2
should read:
aRange.End = aWord.End - Len(aWord)

A leading quote is a single character word but a trailing quote is the first character of a word that includes following spaces or punctuation characters. The original line above only works if there is one space between the trailing quote and the next word. Note that the function Asc() operates on the first character if the argument is a multi-character word.

The routine will work with straight quotes, smart quotes or a mixture. You should start with the cursor outside quoted text and it will find the text within the next pair of quotes.
Ken Endacott    30 Apr 2012, 16:42
Sub QuotedFind()
Dim aWord
Dim aRange As Range
Dim testRange As Range
Dim aFlag As Boolean
  aFlag = False
  Set testRange = ActiveDocument.Range
  testRange.Start = Selection.Range.Start
  For Each aWord In testRange.Words
    If Asc(aWord) = 34 Or Asc(aWord) = 147 Or Asc(aWord) = 148 Then
      If aFlag Then
        aRange.End = aWord.End - 2
        aRange.Start = aRange.Start + 1
        aFlag = False
        aRange.Select
        If MsgBox("Continue?", vbYesNo) = vbNo Then Exit Sub
      Else
        aFlag = True
        Set aRange = aWord
      End If
    End If
  Next aWord
End Sub
Jennifer Thomas    30 Apr 2012, 08:58
Thanks for the advice; actually, I do want to search for any text in quotes -- the point is to find quoted text and then apply formatting to that text.

As you point out, it doesn't work with Wildcards on, so we used to do this with character codes, but those don't work in 2010.

If anyone can help with a macro that would find any text in quotes, I'd really appreciate it!

Thanks.
 
 

Our Company

Sharon Parq Associates, Inc.

About Tips.Net

Contact Us

 

Advertise with Us

Our Privacy Policy

Our Sites

Tips.Net

Beauty and Style

Cars

Cleaning

Cooking

DriveTips (Google Drive)

ExcelTips (Excel 97–2003)

ExcelTips (Excel 2007–2016)

Gardening

Health

Home Improvement

Money and Finances

Organizing

Pests and Bugs

Pets and Animals

WindowsTips (Microsoft Windows)

WordTips (Word 97–2003)

WordTips (Word 2007–2016)

Our Products

Helpful E-books

Newsletter Archives

 

Excel Products

Word Products

Our Authors

Author Index

Write for Tips.Net

Copyright © 2016 Sharon Parq Associates, Inc.