oranco
asked on
Mail merge to print - individual PDFs
Hi,
I have a mail merge to Word which when run will produce x number of 5 page reports.
How can I batch print the reports into individual pdfs with files names based on the value of one of the merge fields.
I imagine I could use a VBA macro to do this. Any ideas?
Thanks
I have a mail merge to Word which when run will produce x number of 5 page reports.
How can I batch print the reports into individual pdfs with files names based on the value of one of the merge fields.
I imagine I could use a VBA macro to do this. Any ideas?
Thanks
ASKER
hi,
we are using Word 2003.
The printing to PDF would be done using a batch command in Adobe Acrobat Distiller but if we are able to break a long document down into individual files, we should be ok.
How can we do it - bear in mind that i am not sure at this point if we have 4, 5 or 6 pages so it should be clear in the VBA where this needs to be set. The naming of the document would come from one of the merge fields.
Thanks
we are using Word 2003.
The printing to PDF would be done using a batch command in Adobe Acrobat Distiller but if we are able to break a long document down into individual files, we should be ok.
How can we do it - bear in mind that i am not sure at this point if we have 4, 5 or 6 pages so it should be clear in the VBA where this needs to be set. The naming of the document would come from one of the merge fields.
Thanks
Sticking with Plan A, the code would look like this.
Sub SplitMMResultDoc()
Dim Doc1 As Document
Dim Doc2 As Document
Dim strFileName As String
Dim rng As Range
Dim sec As Section
Set Doc1 = ActiveDocument
For Each sec In Doc1.Sections
Set rng = sec.Range
rng.MoveEnd wdCharacter, -1 ' omit the seciotn break
rng.Copy
strFileName = sec.Range.Paragraphs(2).Ra nge.Words( 3)
Set Doc2 = Documents.Add
Doc2.Range.Paste
Doc2.SaveAs ("C:\MyFolder\" & strFileName & ".doc")
Doc2.Close False
Next sec
End Sub
If we can't be sure of the position of text from the merge field that provides the name, then Plan B will be to run the merge itself programatically.
Sub SplitMMResultDoc()
Dim Doc1 As Document
Dim Doc2 As Document
Dim strFileName As String
Dim rng As Range
Dim sec As Section
Set Doc1 = ActiveDocument
For Each sec In Doc1.Sections
Set rng = sec.Range
rng.MoveEnd wdCharacter, -1 ' omit the seciotn break
rng.Copy
strFileName = sec.Range.Paragraphs(2).Ra
Set Doc2 = Documents.Add
Doc2.Range.Paste
Doc2.SaveAs ("C:\MyFolder\" & strFileName & ".doc")
Doc2.Close False
Next sec
End Sub
If we can't be sure of the position of text from the merge field that provides the name, then Plan B will be to run the merge itself programatically.
ASKER
thx... so i have create a doc with 8 pages. Each page contains the following text:
'Hello , I'm a test recording
Name is <name>'
When i run the macro tho i get an error 'the requested member of the collection does not exist' referring to:
strFileName = sec.Range.Paragraphs(2).Ra nge.Words( 3)
where am i going wrong?
'Hello , I'm a test recording
Name is <name>'
When i run the macro tho i get an error 'the requested member of the collection does not exist' referring to:
strFileName = sec.Range.Paragraphs(2).Ra
where am i going wrong?
Sorry about the delay. I had to go out.
I can see an error, but not what I would expect.
It looks as if you have a third word in the second paragraph, do it's a bit puzzling.
This code splits the line up, to help isolate the problem.
Sub SplitMMResultDoc()
Dim Doc1 As Document
Dim Doc2 As Document
Dim strFileName As String
Dim rng As Range
Dim sec As Section
Dim para as Paragraph
Dim wrd as range
Set Doc1 = ActiveDocument
For Each sec In Doc1.Sections
Set rng = sec.Range
rng.MoveEnd wdCharacter, -1 ' omit the seciotn break
rng.Copy
Set Para = sec.Range.Paragraphs(2)
Set wrd = para.Words(3)
strFileName = wrd.text
Set Doc2 = Documents.Add
Doc2.Range.Paste
Doc2.SaveAs ("C:\MyFolder\" & strFileName & ".doc")
Doc2.Close False
Next sec
End Sub
I can see an error, but not what I would expect.
It looks as if you have a third word in the second paragraph, do it's a bit puzzling.
This code splits the line up, to help isolate the problem.
Sub SplitMMResultDoc()
Dim Doc1 As Document
Dim Doc2 As Document
Dim strFileName As String
Dim rng As Range
Dim sec As Section
Dim para as Paragraph
Dim wrd as range
Set Doc1 = ActiveDocument
For Each sec In Doc1.Sections
Set rng = sec.Range
rng.MoveEnd wdCharacter, -1 ' omit the seciotn break
rng.Copy
Set Para = sec.Range.Paragraphs(2)
Set wrd = para.Words(3)
strFileName = wrd.text
Set Doc2 = Documents.Add
Doc2.Range.Paste
Doc2.SaveAs ("C:\MyFolder\" & strFileName & ".doc")
Doc2.Close False
Next sec
End Sub
ASKER
Morning,
So now when I run it I get a 'compile error: method or data member not found' - and it gets stuck on Set wrd = para.Words(3)
So now when I run it I get a 'compile error: method or data member not found' - and it gets stuck on Set wrd = para.Words(3)
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
thanks. that's great.
we got it working and added another couple of lines to get it to print to pdf.
brilliant.
we got it working and added another couple of lines to get it to print to pdf.
brilliant.
Which version of Word are you using?