Vá para o final de cada linha e o texto em negrito entre parênteses
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: -
- Verifique cada linha para um início de (
- Comece selecionando o texto entre parênteses (incluindo o parêntese) até que) seja encontrado no final de uma frase
- Formatar o texto em negrito
- Faça isso até o final do arquivo
- 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
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á: [(] * [)]
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!
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