Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
DiscussionsAccessExcelInfoPathOutlookPowerPointPublisherWord
DirectoryUser Groups
Related Topics
Outlook ExpressInternet ExplorerWindowsMS Server ProductsMore Topics ...

MS Office Forum / Word / Mailmerge and Fax / July 2007

Tip: Looking for answers? Try searching our database.

Saving a mail merged document using the value from a datafield

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Biz Analyst - 06 Jul 2007 05:28 GMT
Hi,

I am running a mail merge to a new document.  The template is one
page, and I have some code to pull each page from the merged document
and save it as its own new file.  So, right now, it ends up being
MergeResult1.doc, MergeResult2.doc, MergeResult3.doc, etc...  What I
want to do is save each file using one of the datafield values
(employee ID).  In this case, it would look like this:
employee_12345.doc, employee_67890.doc, employee_98765.doc, etc.
Right now the code saves the doc using a doc counter, but I want to
have it pull the value from the employee ID datafield and add it to
the filename string.  I know this is simple for someone out there.
Can you help me out?  ~ Sean

Here's my code

Sub SaveAllSubDocs(ByRef doc As Word.Document)
Dim subdoc As Word.Subdocument
Dim newdoc As Word.Document
Dim docCounter As Long
docCounter = 1
'Must be in MasterView to work with
'Subdocs as separate files
doc.ActiveWindow.View = wdMasterView
For Each subdoc In doc.Subdocuments
Set newdoc = subdoc.Open
'Remove NextPage section breaks
'originating from mailmerge
RemoveAllSectionBreaks newdoc
With newdoc
.SaveAs FileName:="MergeResult" & CStr(docCounter)
.Close
End With
docCounter = docCounter + 1
Next subdoc
End Sub
Peter Jamieson - 06 Jul 2007 10:11 GMT
It's actually a bit easier if you can pick up the value of the merge field
during the merge - after you have done the merge, the association between
the sections of the output document and the data source is in essence gone,
so you would have to know precisely where to look for the employee ID within
the output document.

In simple cases (where there is a one-to-one correspondence  between a
record in the data source and an output letter), you can use code like the
following:

Sub ProduceOneDocPerSourceRec()
'
' NB, needs bettor error management and doubtless other things a VBA expert
' will point out.

Dim intSourceRecord
Dim objMerge As Word.MailMerge
Dim strOutputDocumentName As String
Dim TerminateMerge As Boolean

' Need to set up this object as the ActiveDocument changes when the
' merge is performed. Besides, it's clearer.

Set objMerge = ActiveDocument.MailMerge
With objMerge

' If no data source has been defined, do it here using OpenDataSource.
' But if it is already defined in the document, you should not need to
define it here.

'  .OpenDataSource _
'    Name:="whatever"

 intSourceRecord = 1
 TerminateMerge = False

 Do Until TerminateMerge
   .DataSource.ActiveRecord = intSourceRecord

   ' if we have gone past the end (and possibly, if there are no records)
   ' then the Activerecord will not be what we have just tried to set it to

   If .DataSource.ActiveRecord <> intSourceRecord Then
     TerminateMerge = True
   ' the record exists
   Else

    ' while we are looking at the correct activerecord,
     ' create the document path name
     ' e.g. - you will need to change this -
     ' and make sure the merge field name is identical
     ' (here, it is case sensitive)

     strOutputDocumentName = _
       "c:\mydoc\MergeResult_" & _
       trim(cstr(.DataSource.Datafields("employee ID").Value)) & ".doc"

     .DataSource.FirstRecord = intSourceRecord
     .DataSource.LastRecord = intSourceRecord
     .Destination = wdSendToNewDocument
     .Execute

     ' The Activedocument is always the output document
     ' Add any parameters you need to these calls
     ActiveDocument.SaveAs strOutputDocumentName
     ActiveDocument.Close
     intSourceRecord = intSourceRecord + 1
   End If
 Loop
End With
End Sub

Other approaches are described on Graham Mayor's site at

http://www.gmayor.com/individual_merge_letters.htm

Peter Jamieson

> Hi,
>
[quoted text clipped - 32 lines]
> Next subdoc
> End Sub

Rate this thread:






 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.