#1
|
|||
|
|||
Find longest paragraph in Word document
I'd like to find the longest paragraph in the currently active Word document. Perhaps someone here can give me suggestions for VBA code.
I want to be able to activate a macro that finds and then selects the longest paragraph in the document. Even better, activating a second time causes the macro change the selection to the second longest paragraph and so on. My current thoughts are to create a 2 x n array that is populated with the paragraph numbers and the corresponding word counts, sort the array by word counts, and then set the active selection to corresponding paragraph number. But I don't know how to implement this and perhaps there's a better way to get to the same solution. Thanks! |
#2
|
|||
|
|||
you could do that with a System.Collections.SortedList and a Scripting.Dictionary:
Code:
Sub ScratchMacro() 'A basic Word macro coded by Greg Maxey Static lngRun As Long Dim lngIndex As Long Dim oSL As Object, oDic As Object Dim oPar As Paragraph ReEntry: Set oSL = CreateObject("System.Collections.SortedList") Set oDic = CreateObject("Scripting.Dictionary") For Each oPar In ActiveDocument.Paragraphs If Not oSL.Contains(Len(oPar.Range.Text)) Then oSL.Add Len(oPar.Range.Text), oPar.Range Else oDic.Add oPar.Range, Len(oPar.Range.Text) End If Next On Error GoTo Reset For lngIndex = 1 To lngRun oSL.RemoveAt oSL.Count - 1 Next lngIndex lngRun = lngRun + 1 oSL.GetByIndex(oSL.Count - 1).Select On Error GoTo 0 For lngIndex = 0 To oDic.Count - 1 Debug.Print oDic.Keys()(lngIndex) & " " & oSL.Getkey(oSL.Count - 1) If oDic.Items()(lngIndex) = oSL.Getkey(oSL.Count - 1) Then MsgBox "Other paragraphs were found with the same length." Exit For End If Next lngIndex lbl_Exit: Set oSL = Nothing: Set oDic = Nothing Exit Sub Reset: lngRun = 0 If MsgBox("You have reached to the shortest paragraph. Do yo want to exit", vbYesNo, "LOOP") = vbYes Then Resume lbl_Exit Else Resume ReEntry End If End Sub |
#3
|
|||
|
|||
Thank you.
That works very well. I didn't know about System.Collections.SortedList and Scripting.Dictionary.
|
Tags |
paragraph, sort, vba |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Find several words in document, copy paragraph and create new document | coolio2341 | Word VBA | 6 | 01-31-2019 01:17 PM |
Find word, Insert Paragraph and bookmark | gattaca714 | Word VBA | 2 | 03-24-2017 09:23 PM |
Find Word then Highlight Whole Sentence and Paragraph Around it | ChrisOK | Word VBA | 4 | 09-08-2016 10:16 PM |
Arrange shortest to longest sentence in Word | omar | Word | 8 | 11-20-2015 04:38 PM |
Find last word in paragraph and delete it | Dave T | Word VBA | 3 | 05-21-2015 12:40 AM |