शब्द 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 है, क्योंकि इन कानूनी दस्तावेज हैं और मैं नहीं करना चाहते हैं अलग करने के लिए तार कि है की तरह बातें "निम्न स्थितियों में: (i) हालत 1, (ii) स्थिति 2, आदि."

हालांकि, यहां पाठ का एक टुकड़ा है, जिसके लिए ऊपर कोड टूट जाता है:

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

आप की कोशिश कर रहे हैं से मेल करने के लिए कोष्ठकों में जो शब्द है एक कठिन और अकृतज्ञ काम शब्द के रूप में ही देखता है, उद्घाटन और समापन कोष्ठक के रूप में अलग-अलग पात्रों और नहीं स्वचालित रूप से मिलान शब्द के द्वारा. नीचे दिए गए कोड को पाता मिलान कोष्ठकों समाप्त अनुगामी रिक्त स्थान, habdles के मामले में कोई कोष्ठकों उपस्थित किया जा रहा है, और त्रुटियों के बाहर अगर आप असंतुलित त्रुटियों. मैं छोड़ दिया है डिबगिंग में बयान इतना है कि आप कर सकते हैं uncomment उन्हें देखने के लिए क्या हो रहा है.

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 में एक अलग चर और उसके बाद में क्या जब तक पाश परीक्षण है कि वर्तमान सीमा से अधिक नहीं है की तुलना में बचाया श्रृंखला के अंत. जैसे कुछ 'की तरह करते हैं जब तक myRange.प्रारंभ>=mySavedEnd'
freeflow

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में