Vaya al final de cada línea y el texto en negrita entre paréntesis

Dec 30 2020

Necesito automatizar el formato de palabras específicas al final de cada línea en MS Word. Como no pude grabar una macro para hacer el trabajo debido a las limitaciones de las macros de Word, tengo que publicarla aquí. Todo lo que necesito es hacer lo siguiente: -

  1. Compruebe cada línea para ver el comienzo de (
  2. Comience a seleccionar el texto entre paréntesis (incluido el paréntesis) hasta que) se encuentre como final de una oración
  3. Dar formato al texto en negrita
  4. Haz esto hasta el final del archivo
  5. Excepción: no aplique formato a los títulos que ya estén en negrita y subrayados.

¿Cómo puedo hacer eso? O rectifique mi código, ya que no hace nada en absoluto.

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

Respuestas

1 RichMichaels Dec 30 2020 at 22:12

Es posible que no necesite una macro si sabe que el estilo del texto del cuerpo de su documento siempre es un estilo designado determinado que no sea un estilo de título. Configure su Buscar y Reemplazar así:

Si el código comodín es difícil de leer en el clip de pantalla, es: [(] * [)]

Roy Dec 31 2020 at 13:51

Finalmente logré 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

¡Funcionó! :) ¡Gracias por el apoyo!

ZygD Dec 30 2020 at 16:54

MS Word no funciona con líneas. El siguiente código de VBA encontrará párrafos que terminan entre paréntesis y en negrita junto con el contenido.

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:

Un ejemplo del uso de Buscar y reemplazar. Utilizando esto, todo el texto entre paréntesis está en negrita (sin tener en cuenta el requisito de estar al final del párrafo / línea):

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