Перейти в конец каждой строки и выделить текст в круглых скобках жирным шрифтом
Мне нужно автоматизировать форматирование определенных слов в конце каждой строки в MS Word. Поскольку я не мог записать макрос для выполнения этой работы из-за ограничений макросов Word, я должен опубликовать его здесь. Все, что мне нужно, это сделать следующее: -
- Проверьте каждую строку на наличие начала (
- Начните выделять текст внутри круглых скобок (включая скобки) до тех пор, пока) не будет найден в конце предложения
- Отформатировать текст полужирным шрифтом
- Сделайте это до конца файла
- Исключение: не форматируйте заголовки, которые уже выделены жирным шрифтом и подчеркнуты.
Как я мог это сделать? Или, пожалуйста, исправьте мой код, поскольку он вообще ничего не делает.
Sub m1()
'
' m1 Macro
'
'
Dim i As Integer
With Selection.Find
For i = 1 To lastRow
.Forward = True
.ClearFormatting
.MatchCase = False
.Wrap = wdFindContinue
.Execute FindText:="("
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.Font.Bold = wdToggle
Selection.Font.BoldBi = wdToggle
Next
End With
End Sub
Ответы
Возможно, вам не понадобится макрос, если вы знаете, что стиль основного текста вашего документа всегда является определенным назначенным стилем, отличным от стиля заголовка. Настройте поиск и замену следующим образом:

Если подстановочный знак трудно прочитать из клипа на экране, это: [(] * [)]
Наконец-то мне удалось построить этот код:
Sub m1()
Selection.HomeKey Unit:=wdStory
With Selection.Find
Do While .Execute(FindText:="(", Forward:=True, MatchWildcards:=False) = True
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.Font.Bold = wdToggle
Selection.Font.BoldBi = wdToggle
Selection.EndKey Unit:=wdLine
Loop
End With
End Sub
Это сработало! :) Спасибо за поддержку!
MS Word не работает с линиями. Следующий код VBA найдет абзацы, оканчивающиеся круглыми скобками, и выделит их жирным шрифтом вместе с содержимым.
Sub Bold_ending_parentheses()
Dim par As Word.Paragraph
Dim str As String
Dim closes As Byte
Dim opens As Long
For Each par In ActiveDocument.Paragraphs
str = StrReverse(par.Range.Text)
closes = InStr(Left(str, 4), ")")
If closes Then
opens = InStr(str, "(")
If opens Then
With par.Range
.Find.Text = StrReverse(Mid(str, closes, opens - closes + 1))
Do
.Find.Execute
If .Find.Found Then .Font.Bold = True
Loop While .Find.Found
End With
End If
End If
Next
End Sub
РЕДАКТИРОВАТЬ:
Пример использования «Найти и заменить». Используя это, весь текст в круглых скобках выделяется жирным шрифтом (без учета требования быть в конце абзаца / строки):
Sub ApplyBoldWithinParentheses()
With ActiveDocument.Content.Find
.ClearFormatting
.Text = "[(]*[)]"
.Replacement.Font.Bold = True
.Format = True
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
End With
End Sub