Idź na koniec każdego wiersza i pogrubiony tekst w nawiasach
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: -
- Sprawdź, czy w każdym wierszu zaczyna się (
- Zacznij zaznaczać tekst w nawiasach (łącznie z nawiasami) do) znajduje się na końcu zdania
- Sformatuj tekst jako pogrubiony
- Zrób to do końca pliku
- 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
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: [(] * [)]
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!
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