Vai alla fine di ogni riga e il testo in grassetto tra parentesi

Dec 30 2020

Ho bisogno di automatizzare la formattazione di parole specifiche alla fine di ogni riga in MS Word. Dal momento che non ho potuto registrare una macro per eseguire il lavoro a causa dei limiti delle macro di Word, devo pubblicarla qui. Tutto ciò di cui ho bisogno è fare quanto segue: -

  1. Controlla ogni riga per l'inizio di (
  2. Inizia a selezionare il testo tra parentesi (comprese le parentesi) finché) non si trova come fine di una frase
  3. Formatta il testo in grassetto
  4. Fallo fino alla fine del file
  5. Eccezione: non formattare le intestazioni che sono già in grassetto e sottolineate.

Come potrei farlo? Oppure rettifica il mio codice in quanto non sta facendo nulla.

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

Risposte

1 RichMichaels Dec 30 2020 at 22:12

Potresti non aver bisogno di una macro se sai che lo stile del corpo del testo del tuo documento è sempre un determinato stile designato diverso da uno stile titolo. Imposta il tuo Trova e sostituisci in questo modo:

Se il codice jolly è difficile da leggere dal clip dello schermo, è: [(] * [)]

Roy Dec 31 2020 at 13:51

Alla fine sono riuscito a costruire questo codice:

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

Ha funzionato! :) Grazie per il supporto!

ZygD Dec 30 2020 at 16:54

MS Word non funziona con le linee. Il seguente codice VBA troverà i paragrafi che terminano con parentesi e li grassetto insieme al contenuto.

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

MODIFICARE:

Un esempio di utilizzo di Trova e sostituisci. Usando questo, tutto il testo tra parentesi è in grassetto (non tenendo conto del requisito di essere alla fine del paragrafo / riga):

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