
Tips.Net > WordTips Home > Macros > Adding Smart Quotes through Macro Text
Summary: When text is added to your document by a macro, and that text includes quotes or apostrophes, Word won’t change the quotes or apostrophes to “smart quotes.” This tip explains why and shows what you can do about this predicament. (This tip works with Microsoft Word 97, Word 2000, Word 2002, Word 2003, and Word 2007.)
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.
Tip #3363 applies to Microsoft Word versions: 97 2000 2002 2003 2007
Take Control! Master the real power behind Word! Successfully master the secrets of powerful formatting and create documents that stand out from the rest. Best of all, you can create documents that are easy to maintain and quick to change.
Check out Word 2007 Styles and Templates today!
Learn to use styles and you discover the real power behind Word. Fast, easy, consistent document formatting and updating is within your grasp. (more information...)
Ask a Word Question
Make a Comment
Beauty Tips
Bugs and Pests Tips
Car Tips
Cleaning Tips
College Tips
Cooking Tips
Excel2007 Tips
ExcelTips
Family Tips
Gardening Tips
Health Tips
Home Tips
Money Tips
Organizing Tips
Pet Tips
Word2007 Tips
WordTips