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: Adding Smart Quotes through Macro Text.

Adding Smart Quotes through Macro Text

by Allen Wyatt
(last updated May 31, 2013)

1

Mary uses macros quite a bit to add text to her documents. The problem is that if the added text contains apostrophes, those are added to the text as "straight" rather than "smart." She indicates that she has the AutoFormat As You Type setting in place that tells Word to use smart quotes instead of straight quotes, but that has no affect on the text inserted by my macros.

When you insert text into a document by using a macro rather than typing, the text in each case is handled differently by Word. Text that you type is processed as each character is entered. Text that is inserted by a macro is treated more like text that is pasted into a document. Thus, if you type "this is my text," Word does its processing after each and every character. That means there is time for the program to check AutoFormatting and AutoCorrect and all the rest of the things that Word does to process text.

When you use a macro to enter the same text, it is inserted as a block, as if you pasted it in place. This means that any characters in the middle of the text (such as quotes or apostrophes) that would have been processed by AutoFormatting are not "caught" and processed. This means that straight quotes are not changed to smart quotes if they are contained within text that is inserted by your macro.

There are a couple of ways you can approach a solution to this. The first is to have your macro, after it inserts all your text, do a find and replace operation to replace all quotes with quotes and apostrophes with apostrophes. This may sound strange, but if you have AutoFormat As You Type set to use smart quotes, the find and replace operation will end up changing the straight quotes to smart quotes.

This approach is the way to go if your macro inserted lots of text in the document. If it is inserting smaller chunks of text, then it is easier to make sure that the macro is inserting the correct ASCII codes for smart quotes to begin with. The ASCII codes for a regular quote is 34, but a smart opening quote has a code of 147 and a closing quote is 148. There are similar differences in the codes used for apostrophes. If you use the Chr function to insert the proper character, you will always have the quotes you want.

One way to do that is to use code similar to the following near the beginning of your macro:

If Options.AutoFormatAsYouTypeReplaceQuotes = True Then
    sAposOpen = Chr(145)
    sAposClose = Chr(146)
    sQuoteOpen = Chr(147)
    sQuoteClose = Chr(148)
Else
    sAposOpen = Chr(39)
    sAposClose = Chr(39)
    sQuoteOpen = Chr(34)
    sQuoteClose = Chr(34)
End If

This code checks to see if the AutoFormat As You Type setting is turned on for smart quotes. If it is, then the four variables are set to the proper ASCII codes for smart quotes. If it is not turned on, then the variables are set to the proper codes for straight quotes. You can then later use these variables in your macro as you assemble and insert text. For instance, if you want to insert the text "my brother's house is down the street," you could insert it in this manner:

sMyString = "my brother" & sAposClose & "s house is down the street"
Selection.InsertAfter " " & sMyString

If you find this approach bothersome (breaking up your strings in this manner), then there is one other option. You can create your own function that does the proper replacements in your strings at one time. The following pair of macros will do the job nicely:

Function RepQuotes(sRaw As String) As String
    Dim sTemp As String
    Dim sAposOpen As String
    Dim sAposClose As String
    Dim sQuoteOpen As String
    Dim sQuoteClose As String

    If Options.AutoFormatAsYouTypeReplaceQuotes = True Then
        sAposOpen = Chr(145)
        sAposClose = Chr(146)
        sQuoteOpen = Chr(147)
        sQuoteClose = Chr(148)
    Else
        sAposOpen = Chr(39)
        sAposClose = Chr(39)
        sQuoteOpen = Chr(34)
        sQuoteClose = Chr(34)
    End If

    sTemp = RepText(sRaw, " " & Chr(39), sAposOpen)
    sTemp = RepText(sTemp, Chr(39), sAposClose)
    sTemp = RepText(sTemp, " " & Chr(34), sQuoteOpen)
    sTemp = RepText(sTemp, Chr(34), sQuoteClose)
    RepQuotes = sTemp
End Function
Function RepText(sIn As String, sFind As String, sRep As String) As String
    Dim x As Integer

    x = InStr(sIn, sFind)
    y = 1
    While x > 0
        sIn = Left(sIn, x - 1) & sRep & Mid(sIn, x + Len(sFind))
        y = x + Len(sRep)
        x = InStr(y, sIn, sFind)
    Wend
    RepText = sIn
End Function

What you do is to construct your text strings as normal, and then pass them through the RepQuotes macro. The macro determines the proper quotes to use and then does the conversions. It determines whether a quote is an opening quote or ending quote in the text by whether there is a space before the quote or not. If there is, it is assumed to be an opening quote; if not, then it is a closing quote.

WordTips is your source for cost-effective Microsoft Word training. (Microsoft Word is the most popular word processing software in the world.) This tip (3363) 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: Adding Smart Quotes through Macro Text.

Author Bio

Allen Wyatt

With more than 50 non-fiction books and numerous magazine articles to his credit, Allen Wyatt is an internationally recognized author. He  is president of Sharon Parq Associates, a computer and publishing services company. ...

MORE FROM ALLEN

Creating Hyperlinks from E-mail Addresses

Got a document that has a whole raft of e-mail address in it? You can easily convert all of them to clickable hyperlinks by ...

Discover More

Putting Headers and Footers On Multiple Worksheets

You can easily create headers and footers for multiple worksheets by working with a selection set of the worksheets you want ...

Discover More

Specifying a Browser in a Hyperlink

Excel allows you to easily add hyperlinks to a worksheet. Click on it, and the target of the link is opened in a browser ...

Discover More

The First and Last Word on Word! Bestselling For Dummies author Dan Gookin puts his usual fun and friendly candor back to work to show you how to navigate Word 2013. Spend more time working and less time trying to figure it all out! Check out Word 2013 For Dummies today!

More WordTips (menu)

Highlight Words from a Word List

Do you need to highlight certain words in a document, and aren't quite sure how to go about it? Using the techniques ...

Discover More

Changing ToolTips for a Macro Button

Want to change the ToolTip that appears when you hover the mouse over a button on a toolbar? It's a bit more involved than ...

Discover More

Resetting Character Formatting in a Macro

Want your macro to get rid of the formatting applied to a selection of text? It's easy enough to do using the Reset method, ...

Discover More
Subscribe

FREE SERVICE: Get tips like this every week in WordTips, a free productivity newsletter. Enter your address and click "Subscribe."

View most recent newsletter.

Comments

If you would like to add an image to your comment (not an avatar, but an image to help in making the point of your comment), include the characters [{fig}] in your comment text. You’ll be prompted to upload your image when you submit the comment. Images larger than 600px wide or 1000px tall will be reduced. Up to three images may be included in a comment. All images are subject to review. Commenting privileges may be curtailed if inappropriate images are posted.

What is 2 + 1?

2013-06-26 18:10:24

B. whiting

I developed a very quick and easy macro that is much shorter. It works in windows 7 so I am not sure if the characters are the same in previous versions. you just have to be sure to select/highlight the text you want to close in quotes before you engage the macro

Sub Quoter()
'
' Quoter Macro
' CTRL + "; Puts Quotes around text you highlight or select first.
'
Selection.Copy
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.TypeText Text:=" " & ChrW(8220) & ChrW(8221)
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.PasteAndFormat (wdPasteDefault)
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.TypeText Text:=" "
End Sub


This Site

Got a version of Word that uses the menu interface (Word 97, Word 2000, Word 2002, or Word 2003)? This site is for you! If you use a later version of Word, visit our WordTips site focusing on the ribbon interface.

Newest Tips
Subscribe

FREE SERVICE: Get tips like this every week in WordTips, a free productivity newsletter. Enter your address and click "Subscribe."

(Your e-mail address is not shared with anyone, ever.)

View the most recent newsletter.