Перейти в конец каждой строки и выделить текст в круглых скобках жирным шрифтом

Dec 30 2020

Мне нужно автоматизировать форматирование определенных слов в конце каждой строки в MS Word. Поскольку я не мог записать макрос для выполнения этой работы из-за ограничений макросов Word, я должен опубликовать его здесь. Все, что мне нужно, это сделать следующее: -

  1. Проверьте каждую строку на наличие начала (
  2. Начните выделять текст внутри круглых скобок (включая скобки) до тех пор, пока) не будет найден в конце предложения
  3. Отформатировать текст полужирным шрифтом
  4. Сделайте это до конца файла
  5. Исключение: не форматируйте заголовки, которые уже выделены жирным шрифтом и подчеркнуты.

Как я мог это сделать? Или, пожалуйста, исправьте мой код, поскольку он вообще ничего не делает.

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

Ответы

1 RichMichaels Dec 30 2020 at 22:12

Возможно, вам не понадобится макрос, если вы знаете, что стиль основного текста вашего документа всегда является определенным назначенным стилем, отличным от стиля заголовка. Настройте поиск и замену следующим образом:

Если подстановочный знак трудно прочитать из клипа на экране, это: [(] * [)]

Roy Dec 31 2020 at 13:51

Наконец-то мне удалось построить этот код:

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

Это сработало! :) Спасибо за поддержку!

ZygD Dec 30 2020 at 16:54

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