View Single Post
 
Old 01-29-2024, 08:27 AM
tonykekw tonykekw is offline Windows 11 Office 2021
Novice
 
Join Date: Jan 2024
Posts: 13
tonykekw is on a distinguished road
Default

Code:
Sub GatherRoundUpdated()
    Dim aRng As Range, aRngHead As Range, aDoc As Document, aDocNew As Document, aTbl As Table, aRow As Row
    Dim sNum As String, lastPosition As Long
    
    Set aDoc = ActiveDocument
    Set aDocNew = Documents.Add
    Set aTbl = aDocNew.Tables.Add(aDocNew.Range, 1, 2)
    aTbl.Cell(1, 1).Range.Text = "Heading"
    aTbl.Cell(1, 2).Range.Text = "Text"
    
    Set aRng = aDoc.Range
    aRng.Find.ClearFormatting
    aRng.Find.Replacement.ClearFormatting
    aRng.Find.Text = "[Red]"
    aRng.Find.Forward = True
    
    Do While aRng.Find.Execute
        If aRng.Start = lastPosition Then Exit Do ' Exit loop if stuck at the same position
        
        lastPosition = aRng.Start
        
        Set aRngHead = aRng.GoToPrevious(wdGoToHeading)
        If Not aRngHead Is Nothing Then
            aRngHead.End = aRngHead.Paragraphs(1).Range.End - 1
            Set aRow = aTbl.Rows.Add
            
            If aRng.ListFormat.ListType = wdListNoNumbering Then
                aRow.Cells(2).Range.FormattedText = aRng.FormattedText
            Else
                sNum = aRng.ListFormat.ListString
                aRow.Cells(2).Range.Text = sNum & vbTab & aRng.Text
            End If
            
            aRow.Cells(1).Range.Text = aRngHead.ListFormat.ListString & vbTab & aRngHead.Text
        End If
        
        aRng.Collapse Direction:=wdCollapseEnd
        aRng.End = aDoc.Range.End
    Loop
    
    ' Clean up
    Set aRng = Nothing
    Set aDoc = Nothing
    Set aDocNew = Nothing
    Set aTbl = Nothing
    Set aRow = Nothing
End Sub
This was my attempt
Reply With Quote