![]() |
|
#1
|
|||
|
|||
|
i have a document with many paragraphs. all formated like:
T: ... P: ... T: ... fist i delete all paragraphs with T: at the beginning with a macro that delete text between two words: ------------------------------------ Sub DeleteTextBetweenTwoWords() Dim strFirstWord As String Dim strLastWord As String Dim objDoc As Document Dim objWord As Object 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 Set objDoc = Nothing Set objWord = Nothing End Sub ------------------------------------------ the result is that i only get the paragraphs with P: at the beginning. how can i split now the remaining paragraphs after, for example, 50 words? |
|
#2
|
||||
|
||||
|
What do you want to do with the two split parts of the paragraph? The following has added code to insert a paragraph break after 50 words
Code:
Sub DeleteTextBetweenTwoWords()
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
oRng.MoveStart wdWord, 50
oRng.Collapse 1
oRng.InsertParagraphAfter
End If
Next lngPara
Set objDoc = Nothing
Set oRng = Nothing
End Sub
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
|
#3
|
|||
|
|||
|
ok.. this is not 100% what I am looking for but its definitely much better than anything I've tried. the splitting is for text analysis. so i can analyze each paragraph seperate and not the whole text together. (so VBA is not really my area of expertise) <br />
<br /> the only small change i need, my paragraph is much longer than 50 words. if i run this code, only one paragraph break is added after 50 words. i had to run it again if its for example 500 words. and for each run i get a new linebreak after every 50 words paragraph. If possible, it woult be perfect, if the linebreak is at the end of a sentence. Last edited by robrob; 03-06-2020 at 01:22 PM. |
|
#4
|
||||
|
||||
|
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 |
|
#5
|
|||
|
|||
|
thats perfect. Many thanks!!!!
|
|
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| How to find (highlight) two and more words in a list of 75k single words in Word 2010 | Usora | Word | 8 | 05-29-2018 03:34 AM |
Capitalize one to two words if they are the only words on a line
|
jrhlavac | Word VBA | 1 | 10-08-2015 08:19 PM |
How to mark underlined words in a sentence as A, B, C, D (beneath the words)
|
thudangky | Word | 13 | 12-12-2013 02:22 AM |
Spliting column with text and numbers
|
mjosic | Excel | 3 | 04-04-2012 05:56 AM |
| Why Words doesn’t show the style of the selected words automatically???? | Jamal NUMAN | Word | 0 | 04-14-2011 03:20 PM |