• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 530
  • Last Modified:

VBA Word macro - how to get characters after the searched for string

I am trying to create a macro which will find a reference number in the document and save as a variable but I cannot seem to find out how to do this.
The reference number will always be 5 characters after the word "Reference: " so I am hopefully looking for some simple code allong the lines of:
Content.Find.Text  = "Reference: " + 5

This is my code so far:
Dim c As Range
Dim startword As String
startword = "Reference: "
Set c = ActiveDocument.Content
c.Find.ClearFormatting
c.Find.Replacement.ClearFormatting

With c.Find
.Text = startword
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWildcards = True
End With

c.Find.Execute

Open in new window


Any thoughts?
0
fruitloopy
Asked:
fruitloopy
  • 3
  • 2
1 Solution
 
GrahamSkanRetiredCommented:
This assumes that the reference number is numeric
Sub FindRefNumber()
    Dim c As Range
    Dim startword As String
    Dim RefNumber As String
    startword = "Reference: "
    Set c = ActiveDocument.Content
    
    With c.Find
        .Text = startword & "[0-9]{5}"
        .Forward = True
        .Wrap = wdFindStop
        .MatchWildcards = True
    
        If .Execute() Then
            RefNumber = Right(c.Text, 5)
        End If
    End With
End Sub

Open in new window

0
 
fruitloopyAuthor Commented:
AWESOME!

I knew it would be something as simple as that. Thank you.

Final code (Modified as the reference number begins with a capital letter):
[code]Dim c As Range
Dim startword As String
Dim refnumber As String

startword = "Reference: "
Set c = ActiveDocument.Content
c.Find.ClearFormatting
c.Find.Replacement.ClearFormatting

With c.Find
.Text = startword & "[A-Z0-9]{5}"
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchWildcards = True

If .Execute() Then
refnumber = Right(c.Text, 5)
End If

End With[/code]
Thanks again
0
 
fruitloopyAuthor Commented:
Actually Graham if you're still there I have a very similar issue.
I need to run a second search for the words "Closing Date: " and to match the next set of numbers and words of a date in the format - 12th November 2016, etc. Obviously the date (1-31) and the number of characters in the month can change.
I've been searching around but can't figure out how to search for a variable length of characters up to a maximum of 20.
Any idea?
0
 
GrahamSkanRetiredCommented:
This works with the dates I have tested so far:
Sub FindDate()
    Dim c As Range
    Dim startword As String
    Dim CloseDate As String
    startword = "Closing Date: "
    Set c = ActiveDocument.Content
    
    With c.Find
        .Text = startword & "[0-9]{1,2}[d-t]{2} [JFMASOND]{1}[a-z]{2,8} [0-9]{4}"
        .MatchWildcards = True
    
        If .Execute() Then
            CloseDate = Split(c.Text, ": ")(1)
        End If
    End With
End Sub

Open in new window

1
 
fruitloopyAuthor Commented:
That's fantastic Graham. Works like a dream!
Thank you
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now