ไปที่จุดสิ้นสุดของแต่ละบรรทัดและข้อความตัวหนาภายในวงเล็บ

Dec 30 2020

ฉันต้องการจัดรูปแบบคำเฉพาะโดยอัตโนมัติในตอนท้ายของแต่ละบรรทัดใน MS Word เนื่องจากฉันไม่สามารถบันทึกมาโครเพื่อทำงานได้เนื่องจากข้อ จำกัด ของมาโคร Word ฉันจึงต้องโพสต์ไว้ที่นี่ สิ่งที่ฉันต้องทำคือทำสิ่งต่อไปนี้: -

  1. ตรวจสอบแต่ละบรรทัดเพื่อเริ่มต้น (
  2. เริ่มต้นการเลือกข้อความในวงเล็บ (รวมถึงวงเล็บ) จนถึง) จะพบเมื่อสิ้นสุดประโยค
  3. จัดรูปแบบข้อความเป็นตัวหนา
  4. ทำเช่นนี้จนจบไฟล์
  5. ข้อยกเว้น: อย่าจัดรูปแบบส่วนหัวที่เป็นตัวหนาและขีดเส้นใต้แล้ว

ฉันจะทำอย่างนั้นได้อย่างไร? หรือโปรดแก้ไขรหัสของฉันเนื่องจากไม่ได้ทำอะไรเลย

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

คำตอบ

1 RichMichaels Dec 30 2020 at 22:12

คุณอาจไม่จำเป็นต้องใช้มาโครหากคุณทราบว่าสไตล์ของข้อความเนื้อหาในเอกสารของคุณเป็นลักษณะที่กำหนดไว้เสมอนอกเหนือจากสไตล์หัวเรื่อง ตั้งค่าค้นหาและแทนที่ของคุณดังนี้:

หากรหัสตัวแทนอ่านยากจากคลิปหน้าจอก็คือ: [(] * [)]

Roy Dec 31 2020 at 13:51

ในที่สุดฉันก็สร้างรหัสนี้สำเร็จ:

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

มันเวิร์ค! :) ขอบคุณสำหรับการสนับสนุน!

ZygD Dec 30 2020 at 16:54

MS Word ไม่ทำงานกับบรรทัด โค้ด VBA ต่อไปนี้จะค้นหาย่อหน้าที่ลงท้ายด้วยวงเล็บและเป็นตัวหนาพร้อมกับเนื้อหา

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

แก้ไข:

ตัวอย่างการใช้ Find and Replace เมื่อใช้สิ่งนี้ข้อความทั้งหมดในวงเล็บจะเป็นตัวหนา (ไม่คำนึงถึงความต้องการที่จะอยู่ท้ายย่อหน้า / บรรทัด):

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