Vá para o final de cada linha e o texto em negrito entre parênteses

Dec 30 2020

Preciso automatizar a formatação de palavras específicas no final de cada linha no MS Word. Como não consegui gravar uma macro para fazer o trabalho devido às limitações das macros do Word, tenho que postá-la aqui. Tudo que eu preciso é fazer o seguinte: -

  1. Verifique cada linha para um início de (
  2. Comece selecionando o texto entre parênteses (incluindo o parêntese) até que) seja encontrado no final de uma frase
  3. Formatar o texto em negrito
  4. Faça isso até o final do arquivo
  5. Exceção: não formate títulos que já estão em negrito e sublinhados.

Como posso fazer isso? Ou retifique meu código, pois ele não está fazendo nada.

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

Respostas

1 RichMichaels Dec 30 2020 at 22:12

Você pode não precisar de uma macro se souber que o Estilo do texto do corpo do seu documento é sempre um determinado estilo designado diferente de um estilo de Título. Configure seu Find and Replace assim:

Se o código curinga for difícil de ler no clipe de tela, ele será: [(] * [)]

Roy Dec 31 2020 at 13:51

Finalmente consegui construir este código:

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

Funcionou! :) Obrigado pelo apoio!

ZygD Dec 30 2020 at 16:54

O MS Word não funciona com linhas. O código VBA a seguir encontrará parágrafos que terminam com parênteses e em negrito junto com o conteúdo.

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

EDITAR:

Um exemplo de uso de Find and Replace. Com isso, todo o texto entre parênteses fica em negrito (não levando em consideração a necessidade de estar no final do parágrafo / linha):

Sub ApplyBoldWithinParentheses()
   With ActiveDocument.Content.Find
      .ClearFormatting
      .Text = "[(]*[)]"
      .Replacement.Font.Bold = True
      .Format = True
      .MatchWildcards = True
      .Execute Replace:=wdReplaceAll
   End With
End Sub