0
votes

I am stuck with this word VBA and in need of some assistance.I have 160 word documents in a folder and each .doc contains atleast one phrase like 'IO:' I want to copy all the file names that starts after 'IO:' and stop copying when the cursor finds Report Output:. Here is one sample input:


`Step Name: Step 3 – GP00BMDR

Step Description:: GENISYS main batch driver which processes external transactions and internal transactions, updates masters, generates transaction records to the accounting subsystem and produces print files.

File Specification: Input: 1. GPFTRNW – PHGP.GPFTRNW.TRN.STD.KSDS

                   2. GPFSCIM – PHGP.GPFSCIM.SCI.KSDS

                   3. GPFSCSM – PHGP.GPFSCSM.SCS.KSDS


               IO: 1. GPFPDGT – PHGP.GPFPDGT.PDG.TRN.KSDS

                   2. GPFRTXT – PHGP.GPFRTXT.RTX.KSDS

Report Output: Nil`


So I want to copy the .doc name and the file names after IO: and stops when the cursor reaches Report Output: . Here is my script:

Sub Ftp_Step_Details()

'this macro checks for FTP in respective steps and copy and writes in a cell along with the     corresponding JCL

Dim wordApplication As Word.Application
Dim wordDocument As Word.Document
Dim flag As String
Dim Folder As String, J As String, FLD As Object
Dim Objfile As Object
Dim objfso As Object
Dim intRow As String
Dim contents As String
flag = True
Dim intResult As Integer
Dim strPath As String
    'the dialog is displayed to the user
intResult = Application.FileDialog(msoFileDialogFolderPicker).Show
'checks if user has cancled the dialog
If intResult <> 0 Then
    'dispaly message box
    strPath = Application.FileDialog( _
        msoFileDialogFolderPicker).SelectedItems(1)
End If
 Set objExcel = CreateObject("Excel.Application")
 Set objWorkbook = objExcel.Workbooks.Open("D:\FILE-LIST\File-List.xlsx")
 objExcel.Visible = True
 objExcel.Workbooks.Add
 objExcel.Cells(1, 1).Value = "Jcl Name"
 objExcel.Cells(1, 2).Value = "File Names"
 'Folder = "D:\TEST-IO"  'JCL source goes here
 Set objfso = CreateObject("Scripting.FileSystemObject")
 Set wordApplication = CreateObject("Word.Application")
 intRow = 2
 'Opening the file in READ mode
Set FLD = objfso.GetFolder(strPath)
For Each file In FLD.Files
Set Objfile = wordApplication.Documents.Open(file)
   Do While Not Objfile.AtEndOfStream
       contents = Objfile.ReadLine
       If contents Like "*IO:" Then
           flag = True
        End If

       If contents Like "*Report Output:*" Then
           flag = False
       End If
       If flag = True Then
            objExcel.Cells(intRow, 1).Value = file.Name
            objExcel.Cells(intRow, 2).Value = contents3
            intRow = intRow + 1
       End If

     Loop
  Next
  Objfile.Close
   MsgBox "THANK YOU"
  End Sub

Now whie testing the code i am getting TYPE MISMATCH in the step Set Objfile = wordApplication.Documents.Open(file) why is that?

Another doubt I have does Readline function works in word VBA as well?

1

1 Answers

0
votes

Now whie testing the code i am getting TYPE MISMATCH in the step Set Objfile = wordApplication.Documents.Open(file) why is that?

Because File is type Scripting.File which is an Object, and the Documents.Open method expects a string.

You could try:

Documents.Open(file.Path)

Another doubt I have does Readline function works in word VBA as well?

No, I don't think so.