
Signature
Hope this helps.
Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.
Doug Robbins - Word MVP
Useful -- but complicated ! ;-)
Are there any of the below that could help me do this automatically? Even if
for a fee?:
1) add in?
2) 3rd party freeware/shareware
Thanks
pg
> You would need to use a macro that accesses the Outlook Object Model to do
> that.
[quoted text clipped - 14 lines]
> >
> > peter
Doug Robbins - Word MVP - 25 Mar 2007 16:31 GMT
As the importance has to be set separately for each email message, I doubt
that there is any alternative to using vba to send each message. Of course,
there is more in the article to which I directed you than is required to do
just that, so if you want to start from the basics, see the article "How to
send an email from Word using VBA" at:
http://www.word.mvps.org/FAQs/InterDev/SendMail.htm
If I was needing to do this, I would not however use mailmerge. Rather, I
would create the equivalent of a mail merge main document in which I used
{ DOCVARIABLE } fields instead of merge fields, then I would iterate through
the data source, creating a new document for each record, and loading
document variables with the data for each record and use vba to send the
document by email.

Signature
Hope this helps.
Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.
Doug Robbins - Word MVP
> Useful -- but complicated ! ;-)
>
[quoted text clipped - 29 lines]
>> >
>> > peter
Peter Jamieson - 25 Mar 2007 17:44 GMT
The following macro may help. It works in a similar way to Doug's macros
(i.e. the ones he pointed you to) but is not designed to deal with the
complexities of multiple attachments and so on. It will only work if there
is one e-mail for each record in the data source. Also, I haven't tested
this specific version of the macro.
Peter Jamieson
Sub EmailOneDocPerSourceRecWithBody()
Dim bOutlookStarted As Boolean
Dim bTerminateMerge As Boolean
Dim intCurrentRecord As Integer
Dim intSourceRecord As Integer
Dim objMailItem As Outlook.MailItem
Dim objMerge As Word.MailMerge
Dim objOutlook As Outlook.Application
Dim rngEndOfDoc As Word.Range
Dim strCurrentRecordFieldText As String
Dim strMailSubject As String
Dim strMailTo As String
Dim strMailBody As String
Dim strOutputDocumentName As String
bOutlookStarted = False
bTerminateMerge = False
' Set up a reference to the
' Activedocument, partly because
' the ActiveDocument changes as you
' merge each record
Set objMailMergeMainDocument = ActiveDocument
Set objMerge = objMailMergeMainDocument.MailMerge
' Start Outlook as necessary
On Error Resume Next
Set objOutlook = GetObject(, "Outlook.Application")
If Err <> 0 Then
Set objOutlook = CreateObject("Outlook.Application")
bOutlookStarted = True
End If
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
Do Until bTerminateMerge
.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
bTerminateMerge = True
' the record exists
Else
' while we are looking at the
' correct activerecord,
' create the mail subject, body and "to"
' Just some sample code here - replace it with
' whatever you need
' NB, when specifying field names e.g. in DataFields("x")
' the names are case sensitive, so spell them correctly
strMailSubject = _
"Results for " & _
objMerge.DataSource.DataFields("k") & _
" " & objMerge.DataSource.DataFields("t")
strMailBody = _
"Dear " & objMerge.DataSource.DataFields("k") & _
vbCrLf & _
"Please find attached a Word document containing" & vbCrLf & _
"your results for..." & vbCrLf & _
vbCrLf & _
"Yours" & vbCrLf & _
"Your name"
strMailTo = objMerge.DataSource.DataFields("e")
' create the document path name
' In this case it can be te same for every recipient,
' but if you want to retain copies of the
' document, you can use info. in the data source
' this is an example - insert your
' own pathname here
strOutputDocumentName = "c:\a\results.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
' Now create a mail item
If .DataSource.DataFields("e") <> "" Then
Set objMailItem = objOutlook.CreateItem(olMailItem)
objMailItem.Display
With objMailItem
.Attachments.Add strOutputDocumentName, olByValue, 1
.Subject = strMailSubject
.Body = strMailBody
.To = strMailTo
.Importance = olImportanceHigh
'.Save
.Send
End With
Set objMailItem = Nothing
End If
intSourceRecord = intCurrentRecord + 1
End If
Loop
End With
' Close Outlook if appropriate
If bOutlookStarted Then
objOutlook.Quit
End If
Set objOutlook = Nothing
Set objMerge = Nothing
End Sub
> Useful -- but complicated ! ;-)
>
[quoted text clipped - 29 lines]
>> >
>> > peter