คำ VBA ว้าบน parentheticals

0

คำถาม

ฉันต้องใช้คอยตามมาโครที่จะดึงออกรายการอยู่ในวงเล็บต้องหมายเหตุอยู่ในคำ:

'
' CommentBubble Macro
'
'
Dim myRange As Range
Set myRange = ActiveDocument.Content
searchtext = "\(*\)"

With myRange.Find
    .MatchWildcards = True
    Do While .Execute(findText:=searchtext, Forward:=True) = True
      If Len(myRange.Text) > 4 Then
        ActiveDocument.Comments.Add myRange, myRange.Text
        myRange.Text = ""
      End If
    Loop
 End With
End Sub

เหตุผลที่ฉันมีความยาวของข้อความเป็น>4 เป็นเพราะพวกนี้คือเอกสารทางกฏหมายและฉันไม่อยากแยกเส้นนั้นอยากได้อะไรบางอย่างเหมือน"ในเงื่อนไขต่อไปนี้:(ฉัน)เงื่อนไข 1,(ฉัน)เงื่อนไขที่ 2 เป็นต้น"

อย่างไรก็ตามนี่คือ snippet ของข้อความสำหรับที่ด้านบนรหัสทำลาย:

This is sample text (with some additional text) that does stuff (with more stuff) and represents 39.4% of shares on the effective date (before giving effect, with some conditions such as ( some stuff (i) and some stuff (ii) with final stuff) and more final stuff) which is subject to  (some conditions here) and conclude here. 

ถ้าคุณวิ่งนี้คุณจะได้ติดตามผล:

This is sample text  that does stuff  and represents 39.4% of shares on the effective date  and some stuff (ii) with final stuff) and more final stuff) which is subject to   and conclude here. 

อย่างที่คุณสามารถเห็นรอบการวงเล็บราะปัญหาบางอย่าง มีคำแนะนำอะไรไหม?

ขอบคุณ!

ms-word vba
2021-11-20 22:17:27
1

คำตอบที่ดีที่สุด

2

คุณกำลังพยายามจะตรงกับวงเล็บรอบจำนวนเงินซึ่งอยู่ในคำคืนที่ยากและ thankless งานเป็นคำเดียวที่เห็นการเปิดและปิดวงเล็บรอบจำนวนเงิเป็นปัจเจกบุคคลตัวอักษรและไม่ใช่โดยอัตโนมัติที่เข้าคู่กับคำพูด รหัสทางด้านล่าเจตรงกับวงเล็บรอบจำนวนเงิ,จะช่วยลดอแกะรอยตามช่องว่าง,habdles กรณีของวงเล็บรอบจำนวนเงิไม่เป็นปัจจุบันและเกิดข้อผิดพลาดถ้าคุณต้องคือความไม่สมดุลเกิดข้อผิดพลาด. ฉันทิ้งไว้ในการดีบั๊กการให้สอบสวนดังนั้นคุณสามารถยกเลิกหมายเหตุพวกเขาจะเห็นสิ่งที่กำลังเกิดขึ้น

Option Explicit

Public Sub ttest()

    Dim myRange As Word.Range
    Set myRange = ActiveDocument.StoryRanges(wdMainTextStory)
    myRange.Collapse direction:=wdCollapseStart
    
    
    Set myRange = NextParenRange(myRange)
    
    Do Until myRange Is Nothing
    
        DoEvents
        
        Debug.Print myRange.Text
        Dim myDupRange As Word.Range
        Set myDupRange = myRange.Duplicate
        myRange.Collapse direction:=wdCollapseEnd
        If myDupRange.Characters.Last.Next.Text = " " Then myDupRange.MoveEnd Count:=1
        myDupRange.Delete
        Set myRange = NextParenRange(myRange)
        
    
    Loop
    
End Sub

Public Function NextParenRange(ByVal ipRange As Word.Range) As Word.Range

    Const OpenP As String = "("
    Const CloseP As String = ")"
    
    Dim myRange As Word.Range
    Set myRange = ipRange.Duplicate
    
    'If myRange.Start <> myRange.End Then myRange.Collapse direction:=wdCollapseStart
    
    'exit if no parentheses exist
    'Debug.Print myRange.Start
    If myRange.MoveUntil(cset:=OpenP) = 0 Then
    
        Set NextParenRange = Nothing
        Exit Function
        
        
    Else
    
        'Debug.Print myRange.Start
        Dim myParenCount As Long
        myParenCount = 1
        myRange.MoveEnd Count:=1

    End If
    
    
    Do Until myParenCount = 0
    
        ' allows VBA to respond to a break key press
        DoEvents
        
        ' if we run out of parentheses before we get back to zero then flag an error
        If myRange.MoveEndUntil(cset:=OpenP & CloseP) = 0 Then
        
            VBA.Err.Raise 17, "Unbalanced parentheses in document"
            
            
        End If
        
        myRange.MoveEnd Count:=1
        'Debug.Print myRange.Characters.Last.Text
        'Debug.Print myRange.Characters.Last.Next.Text
        myParenCount = myParenCount + IIf(myRange.Characters.Last.Text = OpenP, 1, -1)
        
    
    Loop
    
    Set NextParenRange = myRange.Duplicate
    
End Function
2021-11-21 14:57:37

ดีทาง(y)
Brett

ค่อนข้างเรียบร้อยขอบคุณ!
user1357015

@freeflow:มีข้อเสนอแนะอะไรมั้ยวิธีการเปลี่ยนแปลงของคุณรหัสที่จะได้ร่วมงานกับเป็นเฉพาะส่วนที่เลือกเดียว? ฉันเปลี่ยนไป Set myRange = Selection.StoryRanges(wdMainTextStory) แต่นั่นไม่ได้ดูเหมือนพอแล้ว
user1357015

คุณจะต้องทำสองอย่าง เปลี่ยน'ตั้งค่า myRange=ActiveDocument.StoryRanges(wdMainTextStory)'ไปยัง'ตั้งค่า myRange=การเลือก.ช่วง'. แล้วพวกเธอจะต้องถูกจับจุดจบขอ myrange ใน seperate ตัวแปรและจากนั้นในทำนจนกว่าวงจรทดสอบที่ปัจจุบันเริ่มต้นของช่วงที่ไม่ได้มากกว่าที่ช่วยจุดจบของระยะ e.g. บางอย่างเหมือน'ทำจนกระทั่ myRange.เริ่ม>=mySavedEnd'
freeflow

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่