Добавление умных кавычек через макрос текста (Microsoft Word)
Мэри довольно часто использует макросы для добавления текста в свои документы. Проблема в том, что если добавленный текст содержит апострофы, они добавляются к тексту как «прямые», а не «умные». Она указывает, что у нее есть параметр Автоформат при вводе, который указывает Word использовать умные кавычки вместо прямых кавычек, но это не влияет на текст, вставленный моими макросами.
Когда вы вставляете текст в документ с помощью макроса, а не набора, текст в каждом случае обрабатывается Word по-разному. Вводимый вами текст обрабатывается при вводе каждого символа. Текст, вставленный макросом, больше похож на текст, вставленный в документ. Таким образом, если вы наберете «это мой текст», Word выполнит свою обработку после каждого символа. Это означает, что у программы есть время, чтобы проверить автоформатирование и автозамену и все остальное, что Word делает для обработки текста.
Когда вы используете макрос для ввода того же текста, он вставляется как блок, как если бы вы вставили его на место. Это означает, что любые символы в середине текста (например, кавычки или апострофы), которые могли бы быть обработаны с помощью автоформатирования, не «перехватываются» и не обрабатываются. Это означает, что прямые кавычки не превращаются в умные кавычки, если они содержатся в тексте, вставленном вашим макросом.
Есть несколько способов решить эту проблему. Во-первых, чтобы ваш макрос после вставки всего текста выполнял операцию поиска и замены, чтобы заменить все кавычки кавычками и апострофы апострофами. Это может показаться странным, но если у вас установлен параметр Автоформат при вводе для использования умных кавычек, операция поиска и замены приведет к замене прямых кавычек на умные.
Этот подход подходит, если ваш макрос вставил в документ много текста. Если он вставляет более мелкие фрагменты текста, то проще убедиться, что макрос для начала вставляет правильные коды ASCII для умных кавычек. Коды ASCII для обычной цитаты — 34, но умная начальная цитата имеет код 147, а заключительная цитата — 148. Есть аналогичные различия в кодах, используемых для апострофов. Если вы используете функцию Chr для вставки нужного символа, у вас всегда будут кавычки, которые вам нужны.
Один из способов сделать это — использовать в начале макроса код, подобный следующему:
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
Этот код проверяет, включен ли параметр Автоформат по мере ввода для умных кавычек. Если это так, то для четырех переменных устанавливаются правильные коды ASCII для умных котировок. Если он не включен, то для переменных устанавливаются правильные коды для прямых кавычек. Позже вы сможете использовать эти переменные в своем макросе при сборке и вставке текста.
Например, если вы хотите вставить текст «Дом моего брата находится дальше по улице», вы можете вставить его следующим образом:
sMyString = "my brother" & sAposClose & "s house is down the street" Selection.InsertAfter " " & sMyString
Если вам мешает этот подход (разбивать строки подобным образом), есть еще один вариант. Вы можете создать свою собственную функцию, которая одновременно выполняет правильные замены в ваших строках.
Следующая пара макросов отлично справится с этой задачей:
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
Что вы делаете, так это создаете свои текстовые строки как обычно, а затем передаете их через макрос RepQuotes. Макрос определяет правильные кавычки для использования, а затем выполняет преобразования. Он определяет, является ли цитата вступительной или конечной цитатой в тексте, по тому, есть ли пробел перед цитатой или нет. Если есть, предполагается, что это начальная котировка; если нет, то это заключительная цитата.
_Примечание: _
Если вы хотите знать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах WordTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / wordribbon-WordTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
WordTips — ваш источник экономичного обучения работе с Microsoft Word.
(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (3363) применим к Microsoft Word 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Word (Word 2007 и позже) здесь:
link: / wordribbon-Adding_Smart_Quotes_through_Macro_Text [Добавление умных цитат через макротекст]
.