Idź na koniec każdego wiersza i pogrubiony tekst w nawiasach

Dec 30 2020

Muszę zautomatyzować formatowanie określonych słów na końcu każdego wiersza w programie MS Word. Ponieważ nie mogłem nagrać makra do wykonania pracy z powodu ograniczeń makr Worda, muszę to tutaj zamieścić. Wszystko, czego potrzebuję, to wykonać następujące czynności: -

  1. Sprawdź, czy w każdym wierszu zaczyna się (
  2. Zacznij zaznaczać tekst w nawiasach (łącznie z nawiasami) do) znajduje się na końcu zdania
  3. Sformatuj tekst jako pogrubiony
  4. Zrób to do końca pliku
  5. Wyjątek: nie formatuj nagłówków, które są już pogrubione i podkreślone.

Jak mogłem to zrobić? Lub popraw mój kod, ponieważ w ogóle nic nie robi.

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

Odpowiedzi

1 RichMichaels Dec 30 2020 at 22:12

Możesz nie potrzebować makra, jeśli wiesz, że styl tekstu podstawowego dokumentu jest zawsze określonym stylem innym niż styl nagłówka. Skonfiguruj funkcję Znajdź i zamień w następujący sposób:

Jeśli kod wieloznaczny jest trudny do odczytania z klipu ekranowego, jest to: [(] * [)]

Roy Dec 31 2020 at 13:51

W końcu udało mi się zbudować ten kod:

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

Zadziałało! :) Dzięki za wsparcie!

ZygD Dec 30 2020 at 16:54

MS Word nie działa z liniami. Poniższy kod VBA znajdzie akapity kończące się nawiasami i pogrubione wraz z zawartością.

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

EDYTOWAĆ:

Przykład użycia funkcji Znajdź i zamień. W ten sposób cały tekst w nawiasach jest pogrubiony (bez uwzględnienia wymogu umieszczenia na końcu akapitu / wiersza):

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