#1
|
|||
|
|||
Range For Last Line/Paragraph - To Find Date
My friends, from years ago, this forum helped me with the code below.
In the Word Document, It finds a date in a format like this: 9/24/2022 10:04:36 AM It works great. But now there is more than one date in the document. So I want it to find only the date on the last line of the document, the last paragraph. How can I change this to find the date in the last line/paragraph of the document? This is the old code: Code:
Dim oRng As Word.Range Set oRng = ActiveDocument.Range With oRng.Find .Text = "[0-9]{1,2}\/" .MatchWildcards = True If .Execute Then oRng.End = oRng.Paragraphs(1).Range.End - 1 If IsDate(oRng.Text) Then ActiveDocument.Range.InsertAfter "It took this long: " & fcnCalcSpanStart_Finish(oRng.Text, Now) End If End If End With Last edited by macropod; 09-24-2022 at 03:26 PM. Reason: Added code tags |
#2
|
||||
|
||||
That's as simple as:
Set oRng = ActiveDocument.Paragraphs.Last.Range
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#3
|
|||
|
|||
Macropad, Thanks, I tried several things with "Last" in there but nothing worked.
I am sure yours will work. I will try it Monday at work and let you know. |
#4
|
|||
|
|||
Macropad, It did not work.
The Word document is two pages long and ends like this: XXXX action taken by XXX personnel. Active Directory Record already enabled. No Action Taken by XXX Personnel. User has been updated in the Remedy System Start Date & Time 9/22/2022 10:36:45 AM The code I tested looks like this: Code:
Dim oRng As Word.Range ‘Set oRng = ActiveDocument.Range Set oRng = ActiveDocument.Paragraphs.Last.Range ActiveDocument.Range.InsertAfter "Just After The Set" & oRng.Text With oRng.Find .Text = "[0-9]{1,2}\/" .MatchWildcards = True If .Execute Then oRng.End = oRng.Paragraphs(1).Range.End - 1 If IsDate(oRng.Text) Then ActiveDocument.Range.InsertAfter "It took this long: " & fcnCalcSpanStart_Finish(oRng.Text, Now) End If End If End With The output is this: XXXX action taken by XXX personnel. Active Directory Record already enabled. No Action Taken by XXX Personnel. User has been updated in the Remedy System Start Date & Time 9/22/2022 10:36:45 AM Just After The Set Monday, September 26, 2022 10:53:57 AM So the new code is not finding the Date in the document. Somehow the date and time when the code is run gets into ORng. And the: With oRng.Find does not find the date. We know it does not find it because the If.Execute statements below it do not run. I have the book, "Mastering VBA for Microsoft Office 2016" -Latest Version. And I cannot find anywhere that shows the way to do this. Thanks Macrpod. |
#5
|
|||
|
|||
Macropad, I found a work around.
I selected and highlighted the date in the last paragraph: 9/22/2022 10:36:45 AM Then I used this: Set oRng = Selection.Range That works. But if you can find a way to do it using "Last" Please let me know. And where the devil can I read about all the ways to use Range? Somebody like you should write a book and make lots of money. We really do need somebody to write a book with VBA syntax with lots and lots of examples. The best way to learn any language is by reading good literature. |
#6
|
||||
|
||||
Your latest code isn't the same as what you posted the first time. This line:
ActiveDocument.Range.InsertAfter "Just After The Set" & oRng.Text inserts content after the range you just defined with: Set oRng = ActiveDocument.Paragraphs.Last.Range Hence, oRng no longer points to the last paragraph! Your code should be something like: Code:
With ActiveDocument.Range .InsertAfter vbCr & "Just After The Set " & .Paragraphs.Last.Range.Text With .Find .Text = "[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}" .MatchWildcards = True .Execute .Forward = False End With If .Find.Found = True Then .End = .Paragraphs.Last.Range.End - 1 If IsDate(.Text) Then ActiveDocument.Range.InsertAfter "It took this long: " & fcnCalcSpanStart_Finish(oRng.Text, Now) End If End With
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#7
|
|||
|
|||
Macropod, Thank you for your reply. I will try your code.
And I see now that I was inserting stuff after the defined range. I will go experiment with all this until I get the results I want. But I have a question, If the text is this: XXXX action taken by XXX personnel. Active Directory Record already enabled. No Action Taken by XXX Personnel. User has been updated in the Remedy System Start Date & Time 9/22/2022 10:36:45 AM And with the code: Set oRng = ActiveDocument.Paragraphs.Last.Range The contents of oRng = Start Date & Time 9/22/2022 10:36:45 AM Is that right? |
#8
|
||||
|
||||
Quote:
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
Thread Tools | |
Display Modes | |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Find and replace only paragraph marks in blank line | laith93 | Word | 4 | 04-27-2022 12:18 PM |
How to resize a paragraph range to include just a single line of text | Peterson | Word VBA | 5 | 07-08-2019 04:36 PM |
Using DateValue to find if a date exists within a certain range | OfficeAssociate99 | Excel Programming | 3 | 07-13-2017 11:06 AM |
Find if Date range falls within another range | Triadragon | Excel | 3 | 05-02-2016 11:48 AM |
Find a Date in a Range | rspiet | Excel | 3 | 02-15-2016 08:37 AM |