Определение начала предложения в макросе (Microsoft Word)
Шелли разрабатывает макрос, который изменяет все перестановки заглавных букв в «при условии, что» («при условии, что», «при условии» и т. Д.)
в нижний регистр. Это достаточно легко сделать, но если фраза начинается с предложения, букву «Р» следует писать с заглавной буквы. Шелли задается вопросом, есть ли способ в макросе определить, стоит ли такая фраза, как «при условии, что», в начале предложения.
Есть несколько способов сделать это. Во-первых, вы можете использовать «Найти и заменить» для последовательного поиска и замены. Макрос может делать следующее:
-
Измените все варианты «при условии» на строчные.
-
Найдите «. При условии, что» (точка, пробел, «при условии») и замените его на «. При условии» (правильное использование заглавных букв).
-
Повторите поиск и замените на шаге 2, используя другие знаки препинания в конце предложения, такие как восклицательный знак, вопросительный знак или любой из этих знаков препинания, за которым следует кавычка.
Поскольку это делается в макросе, процесс должен идти очень быстро.
Вот пример того, что может сработать:
Sub ChangeCase1() Dim vFindText As Variant Dim vReplaceText As Variant Dim orng As Range Dim i As Long vFindText = Array(". provided that", _ "! provided that", _ "? provided that", _ "."" provided that", _ "!"" provided that", _ "?"" provided that") vReplaceText = Array(". Provided that", _ "! Provided that", _ "? Provided that", _ "."" Provided that", _ "!"" Provided that", _ "?"" Provided that") ' Set all occurrences to lowercase Set orng = ActiveDocument.Range With orng.Find .ClearFormatting .Replacement.ClearFormatting Do While .Execute(FindText:="provided that", _ Forward:=True, _ Wrap:=wdFindStop) = True orng.Select orng = "provided that" orng.Collapse wdCollapseEnd Loop End With ' Account for end-of-sentence For i = 0 To UBound(vFindText) Set orng = ActiveDocument.Range With orng.Find .ClearFormatting .Replacement.ClearFormatting Do While .Execute(FindText:=vFindText(i), _ MatchCase:=True, _ Forward:=True, _ Wrap:=wdFindStop) = True orng.Select orng = vReplaceText(i) orng.Collapse wdCollapseEnd Loop End With Next End Sub
Одним из недостатков этого подхода является то, что он не допускает появления слова «при условии, что» в начале абзаца. Макрос можно изменить, чтобы он учитывал такие случаи, но это было бы более сложно.
Однако вы можете использовать другой подход. Здесь используется довольно скрытая установка для свойства Case: wdTitleSentence. Этот параметр изменяет все символы (за одним заметным исключением) на строчные, а если фраза находится в начале предложения, переводит первый символ на верхний регистр. Вот как вы можете использовать его в макросе:
Sub ChangeCase2() With Selection.Find .ClearFormatting .Wrap = wdFindContinue .Forward = True .Format = True .MatchCase = False .MatchWildcards = False .Text = "provided that" .Execute While .Found Selection.Range.Case = wdLowerCase Selection.Range.Case = wdTitleSentence Selection.Collapse Direction:=wdCollapseEnd .Execute Wend End With End Sub
Обратите внимание, что в цикле While есть два присвоения свойству Case. Первый устанавливает выделение (то, что было найдено) в нижний регистр, а второй — в регистр заголовка для предложения. Настройка нижнего регистра специально предназначена для обработки «одного примечательного исключения»
Я упоминал — если текст «ПРЕДОСТАВЛЕНО» находится в начале предложения, параметр wdTitleSentence по какой-то причине не изменит его на «При условии, что». Однако он без проблем изменит «при условии, что» (которое становится «ПРЕДОСТАВЛЕНО» после установки строчных букв) на «при условии».
_Примечание: _
Если вы хотите знать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах WordTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / wordribbon-WordTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
WordTips — ваш источник экономичного обучения работе с Microsoft Word.
(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (13398) относится к Microsoft Word 2007, 2010 и 2013.