View Single Post
 
Old 03-07-2020, 01:10 AM
gmayor's Avatar
gmayor gmayor is offline Windows 10 Office 2016
Expert
 
Join Date: Aug 2014
Posts: 4,144
gmayor has much to be proud ofgmayor has much to be proud ofgmayor has much to be proud ofgmayor has much to be proud ofgmayor has much to be proud ofgmayor has much to be proud ofgmayor has much to be proud ofgmayor has much to be proud ofgmayor has much to be proud of
Default

Bearing in mind that your idea of what constitutes a 'word' and what VBA considers is a word may not coincide. The following will split the paragraphs into 50 'word' segments.
Code:
Sub DeleteTextBetweenTwoWords()

'Graham Mayor - https://www.gmayor.com - Last updated - 07 Mar 2020 

Dim strFirstWord As String
Dim strLastWord As String
Dim objDoc As Document
Dim lngPara As Long
Dim oRng As Range

    Set objDoc = ActiveDocument
    strFirstWord = "T:"
    strLastWord = "P:"

    With Selection
        .HomeKey Unit:=wdStory
        With Selection.Find
            .ClearFormatting
            .Replacement.ClearFormatting
            .Text = strFirstWord & "*" & strLastWord
            .Replacement.Text = strLastWord
            .MatchWildcards = True
            .Execute Replace:=wdReplaceAll
        End With
    End With

    For lngPara = objDoc.Paragraphs.Count To 1 Step -1
        Set oRng = objDoc.Paragraphs(lngPara).Range
        If oRng.Words.Count > 50 Then
            SplitString oRng
        End If
    Next lngPara

    With Selection
        .HomeKey Unit:=wdStory
        With Selection.Find
            .ClearFormatting
            .Replacement.ClearFormatting
            .Text = "%%%%"
            .Replacement.Text = "^p"
            .MatchWildcards = True
            .Execute Replace:=wdReplaceAll
        End With
    End With
lbl_Exit:
    Set objDoc = Nothing
    Set oRng = Nothing
    Exit Sub
End Sub

Private Sub SplitString(oRng As Range)
'Graham Mayor - https://www.gmayor.com - Last updated - 07 Mar 2020 

Dim i As Integer
Dim oSplit As Range
    Set oSplit = oRng
    Do
        oSplit.MoveStart wdWord, 50
        If Len(oSplit) < 51 Then GoTo lbl_Exit
        oSplit.InsertBefore "%%%%"
    Loop
lbl_Exit:
    Set oSplit = Nothing
    Exit Sub
End Sub
__________________
Graham Mayor - MS MVP (Word) (2002-2019)
Visit my web site for more programming tips and ready made processes www.gmayor.com
Reply With Quote