You don't really get any control over the format/content of the e-mails if you use MailMerge to generate them (even if you use Word Events to do stuff for each e-mail.
You may be able to adapt Doug Robbins' article at
http://word.mvps.org/FAQs/MailMerge/MergeWithAttachments.htm
using HTMLBody instead of Body, or adapt the code provided below (which is probably much the same as Doug's). I haven't tried it with HTMLBody though.
Peter Jamieson
You have to make a reference to Microsoft Outlook 11.0 Object Library (or the appropriate version of the library) in the VB Editor when this module is open.
Sub EmailOneDocPerSourceRecWithBody() Dim bOutlookStarted As Boolean Dim bTerminateMerge As Boolean Dim intSourceRecord As Integer Dim objMailItem As Outlook.MailItem Dim objMerge As Word.MailMerge Dim objOutlook As Outlook.Application 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 objMerge = ActiveDocument.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
strMailSubject = _ "Results for " & _ objMerge.DataSource.DataFields("Firstname") & _ " " & objMerge.DataSource.DataFields("Lastname")
strMailBody = _ "Dear " & objMerge.DataSource.DataFields("Firstname") & _ vbCrLf & _ "Please find attached a Word document containing" & vbCrLf & _ "your results for..." & vbCrLf & _ vbCrLf & _ "Yours" & vbCrLf & _ "Your name" strMailTo = objMerge.DataSource.DataFields("Emailaddress")
' 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"
' strOutputDocumentName = _ ' "c:\mymergeletters\_" & _ ' .DataSource.DataFields("Lastname").Value & _ ' " letter.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
Set objMailItem = objOutlook.CreateItem(olMailItem) With objMailItem .Subject = strMailSubject .Body = strMailBody .To = strMailTo .Attachments.Add strOutputDocumentName, olByValue, 1 '.Save .Send End With Set objMailItem = Nothing
intSourceRecord = intSourceRecord + 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
Peter Jamieson
"Gaspard" <Gaspard[ at ]discussions.microsoft.com> wrote in message news:E63B02D8-B854-4BA7-BE11-9AB9AF55C5C0[ at ]microsoft.com...
[Quoted Text] > Hey, > Is this possible to customize the body* of the e-mail if the merge mail is > done in the attachement? > > Sub SendEmail() > > With ActiveDocument.MailMerge > .Destination = wdSendToEmail > .MailAddressFieldName = "Email" > .MailAsAttachment = True > .MailFormat = wdMailFormatHTML > .MailSubject = "EmailTest" > > *.HTMLBody= "Blablabla" or Body= "Blablabla" ???? > > .SuppressBlankLines = True > With .DataSource > .FirstRecord = wdDefaultFirstRecord > .LastRecord = wdDefaultLastRecord > End With > .Execute Pause:=False > End With > End Sub > > Thanks - Gaspard
|