Loop through Word documents from Excel

R

Raj

Hi,

A folder has several word documents. These need to be opened from
Excel and checked for existence of a string. If the string exists, the
name of the file needs to be written in the Excel workbook with a
hyperlink to the word document.

Please help with sample code/pointers.

Thanks in Advance for the help.

Regards,
Raj
 
J

Jacob Skaria

Dear Raj

Please try the below and feedback. Set reference to Microsoft Word Object
Library from VBE Tools|References Dialog Box.


Sub SearchStringinWord()

Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim strFolder As String
Dim strFile As String
Dim strSearchString As String
Dim lngRow As Long

Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = False

strFolder = "c:\"
strSearchString = "jacob"
strFile = Dir("c:\*.doc", vbNormal)
Do While strFile <> ""

Set wrdDoc = wrdApp.Documents.Open(strFolder & strFile)
If InStr(1, wrdDoc.Range.Text, strSearchString, vbTextCompare) > 0 Then
lngRow = lngRow + 1
ActiveSheet.Range("A" & lngRow).Formula = "=HYPERLINK(""" & strFolder &
strFile & """,""" & strFile & """)"
End If
wrdDoc.Close


strFile = Dir
Loop


Set wrdDoc = Nothing
wrdApp.Quit
Set wrdApp = Nothing

End Sub

If this post helps click Yes
 
J

Jacob Skaria

A minor change...Hardcoded path replaced with variable..

Sub SearchStringinWord()

Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim strFolder As String
Dim strFile As String
Dim strSearchString As String
Dim lngRow As Long

Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = False

strFolder = "c:\"
strSearchString = "jacob"
strFile = Dir(strFolder & "*.doc", vbNormal)
Do While strFile <> ""

Set wrdDoc = wrdApp.Documents.Open(strFolder & strFile)
If InStr(1, wrdDoc.Range.Text, strSearchString, vbTextCompare) > 0 Then
lngRow = lngRow + 1
ActiveSheet.Range("A" & lngRow).Formula = "=HYPERLINK(""" & strFolder &
strFile & """,""" & strFile & """)"
End If
wrdDoc.Close


strFile = Dir
Loop


Set wrdDoc = Nothing
wrdApp.Quit
Set wrdApp = Nothing

End Sub
 
R

Raje

A minor change...Hardcoded path replaced with variable..

Sub SearchStringinWord()

Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim strFolder As String
Dim strFile As String
Dim strSearchString As String
Dim lngRow As Long

Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = False

strFolder = "c:\"
strSearchString = "jacob"
strFile = Dir(strFolder & "*.doc", vbNormal)
Do While strFile <> ""

Set wrdDoc = wrdApp.Documents.Open(strFolder & strFile)
If InStr(1, wrdDoc.Range.Text, strSearchString, vbTextCompare) > 0 Then
lngRow = lngRow + 1
ActiveSheet.Range("A" & lngRow).Formula = "=HYPERLINK(""" & strFolder&
strFile & """,""" & strFile & """)"
End If
wrdDoc.Close

strFile = Dir
Loop

Set wrdDoc = Nothing
wrdApp.Quit
Set wrdApp = Nothing

End Sub

--
If this post helps click Yes
---------------
Jacob Skaria









- Show quoted text -

Thanks a lot. Exactly what I wanted. However, two more requirements
have cropped up.
1. All instances of the word have to be highlighted in the Word
document in green.
2. In the column to the right of the hyperlink in the Worksheet, the
count should be displayed.

Thanks, once again, for the help.

Regards,
Raj
 
J

Jacob Skaria

Raj, modified as per your request

Sub test1()
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim strFolder As String
Dim strFile As String
Dim strSearchString As String
Dim lngRow As Long
Dim intCount As Integer

Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = False

strFolder = "c:\"
strSearchString = "jacob"
strFile = Dir("c:\*.doc", vbNormal)
Do While strFile <> ""
Set wrdDoc = wrdApp.Documents.Open(strFolder & strFile)
intCount = 0

wrdApp.Options.DefaultHighlightColorIndex = wdYellow
With wrdDoc.Range.Find
.Text = strSearchString
.Replacement.Text = strSearchString
.Replacement.Highlight = True
.MatchCase = False
.MatchWholeWord = False
.Execute Replace:=wdReplaceAll
End With

If UBound(Split(UCase(wrdDoc.Range.Text), UCase(strSearchString))) <> 0
Then
lngRow = lngRow + 1
ActiveSheet.Range("A" & lngRow).Formula = "=HYPERLINK(""" & strFolder &
strFile & """,""" & strFile & """)"
ActiveSheet.Range("b" & lngRow) = UBound(Split(UCase(wrdDoc.Range.Text),
UCase(strSearchString)))
wrdDoc.Save
End If

wrdDoc.Close
strFile = Dir
Loop


Set wrdDoc = Nothing
wrdApp.Quit
Set wrdApp = Nothing

End Sub


If this post helps click Yes
 
R

Raje

Raj, modified as per your request

Sub test1()
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim strFolder As String
Dim strFile As String
Dim strSearchString As String
Dim lngRow As Long
Dim intCount As Integer

Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = False

strFolder = "c:\"
strSearchString = "jacob"
strFile = Dir("c:\*.doc", vbNormal)
Do While strFile <> ""
Set wrdDoc = wrdApp.Documents.Open(strFolder & strFile)
intCount = 0

    wrdApp.Options.DefaultHighlightColorIndex = wdYellow
    With wrdDoc.Range.Find
        .Text = strSearchString
        .Replacement.Text = strSearchString
        .Replacement.Highlight = True
        .MatchCase = False
        .MatchWholeWord = False
        .Execute Replace:=wdReplaceAll
    End With

    If UBound(Split(UCase(wrdDoc.Range.Text), UCase(strSearchString))) <> 0
Then
    lngRow = lngRow + 1
    ActiveSheet.Range("A" & lngRow).Formula = "=HYPERLINK(""" & strFolder &
strFile & """,""" & strFile & """)"
    ActiveSheet.Range("b" & lngRow) = UBound(Split(UCase(wrdDoc.Range.Text),
UCase(strSearchString)))
    wrdDoc.Save
    End If

wrdDoc.Close
strFile = Dir
Loop

Set wrdDoc = Nothing
wrdApp.Quit
Set wrdApp = Nothing

End Sub

If this post helps click Yes

Thanks a Ton, Jacob. That was great help.

Regards,
Raj
 
B

Big John

How modify Sub if searching strings are from range G2 down as follow:

G2 head-ache
G3 tooth-ache
G4 malaria
....

and create one Worksheet named with every searching string (illness), so
looping thru G2:Gn ?

Thanks in advance.
Regards,
Gianni.
 
B

Big John

Sorry for my previous post not so clear.
Pls. read:

and make New Worksheets with Name of each Searching String (illness), so
looping thru G2:Gn ?
Regards,
Gianni.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top