Mail Merge HTML Format Word 2002 XP SP3

S

simon_forer

Hi have slightly modified Doug Robbin's code to merge 160 emails all
with attachments (some client specific, some generic). Thanks for code
Doug!!
From reading other posts in here, I gather the emails I send out (using
Word 2002 XP SP3) should retain formatting...but they don't.

Is there any extra code to send as HTML or is this just the default?

Code I'm using is:

Sub emailmergewithattachments()

Dim Source As Document, Maillist As Document
Dim Datarange As Range
Dim Counter As Integer, i As Integer
Dim bStarted As Boolean
Dim oOutlookApp As Outlook.Application
Dim oItem As Outlook.MailItem
Dim mysubject As String, message As String, title As String

Set Source = ActiveDocument

' Check if Outlook is running. If it is not, start Outlook
On Error Resume Next
Set oOutlookApp = GetObject(, "Outlook.Application")
If Err <> 0 Then
Set oOutlookApp = CreateObject("Outlook.Application")
bStarted = True
End If

' Open the catalog mailmerge document
With Dialogs(wdDialogFileOpen)
.Show
End With
Set Maillist = ActiveDocument

' Show an input box asking the user for the subject to be inserted into
the email messages
message = "Enter the subject to be used for each email message." '
Set prompt.
title = " Email Subject Input" ' Set title.

' Display message, title
mysubject = InputBox(message, title)

' Iterate through the rows of the catalog mailmerge document,
extracting the information
' to be included in each email.

Counter = 1

While Counter <= Maillist.Tables(1).Rows.Count
Source.Sections.First.Range.Copy
Documents.Add
Selection.Paste

' Add Name to first line

Selection.GoTo What:=wdGoToSection, Which:=wdGoToFirst, Count:=1,
Name:=""
Selection.TypeText Text:=Maillist.Tables(1).Cell(Counter, 1).Range
Selection.TypeParagraph
Selection.TypeParagraph


Set oItem = oOutlookApp.CreateItem(olMailItem)
With oItem
.Subject = mysubject
.Body = ActiveDocument.Content
Set Datarange = Maillist.Tables(1).Cell(Counter, 2).Range
Datarange.End = Datarange.End - 1
.To = Datarange
For i = 3 To Maillist.Tables(1).Columns.Count
Set Datarange = Maillist.Tables(1).Cell(Counter, i).Range
Datarange.End = Datarange.End - 1
.Attachments.Add Trim(Datarange.Text), olByValue, 1
Next i
.Send HTML
End With
Set oItem = Nothing
ActiveDocument.Close wdDoNotSaveChanges
Counter = Counter + 1
Wend

' Close Outlook if it was started by this macro.
If bStarted Then
oOutlookApp.Quit
End If

'Clean up
Set oOutlookApp = Nothing
Source.Close wdDoNotSaveChanges
Maillist.Close wdDoNotSaveChanges

End Sub


Thanks
Simon
 
D

Doug Robbins - Word MVP

From the modifications that you have made to the code, it seems that instead
of using mailmerge to create the personalised content of the email message,
you are using code to add the name to the document that becomes the body of
each message.

You seem to have missed the step

"Then execute to a new document the mail merge that you want to send out by
email with the attachments and with the result of execution of that mail
merge on the screen, run a macro containing the following code."

The command

..Send HTML

that you have in your code is not correct.


The following information from the Outlook Help file is probably what you
are looking for:

MailItem.BodyFormat Property
Returns or sets an OlBodyFormat constant indicating the format of the body
text. Read/write.

expression.BodyFormat

expression A variable that represents a MailItem object.

Remarks

The body text format determines the standard used to display the text of the
message. Microsoft Outlook provides three body text format options: Plain
Text, Rich Text (RTF), and HTML.
All text formatting will be lost when the BodyFormat property is switched
from RTF to HTML and vice-versa.
Example

The following Microsoft Visual Basic/Visual Basic for Applications (VBA)
example creates a new MailItem object and sets the BodyFormat property to
olFormatHTML. The body text of the e-mail item will now appear in HTML
format.

Sub CreateHTMLMail()
'Creates a new e-mail item and modifies its properties.

Dim olApp As Outlook.Application
Dim objMail As MailItem
Set olApp = Outlook.Application
'Create mail item
Set objMail = olApp.CreateItem(olMailItem)

With objMail
'Set body format to HTML
.BodyFormat = olFormatHTML
.HTMLBody = "<HTML><H2>The body of this message will appear in
HTML.</H2><BODY>Type the message text here. </BODY></HTML>"
.Display
End With

End Sub



--
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
 
S

simon_forer

Doug, thanks for reply.

Your post was a big help, but I ended up sending emails without HTML
formatting. I was hoping to use the formatting contained in my Word
template (and signature), but looks like I need to be a semi expert in
HTML programing! It was one of those nice to have things, but not all
that important.

Once again Doug, thanks for your help, it was a huge help!

Regards
Simon
 
L

LJ

Hi reading through this - this appears to answer the question I have but I'm
a little lost! I'm trying to send emails via mail merge but want to send them
HTML to maintain the formatting of the document I'm using the macro - from
your article Doug Mail merge to email with attachments - are you saying you
have now modified that code to send as HTML and if so how do I do this please.

Many thanks,
Lauretta
 
D

Doug Robbins - Word MVP

No, I have not modified the code. I did however indicate how it would need
to be modified.

Personally, I would not bother trying to change it to sent the messages in
HTML format as you have no control over how the recipient reads them. Most
astute people will have the mail program set to display messaged in text
only format.

If you really want formatting in the information that is sent, send as an
attachment in .pdf format. Then you can really control how the recipient
sees it.

To see how to create the individual attachments, See the "Individual Merge
Letters" item on fellow MVP Graham Mayor's website at:

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

If you are using Word XP or later, the "Add-in to Merge Letters to Separate
Files" that I have written and that can be downloaded from that site will
allow you to create each letter as a separate file with a filename taken
from a field in the data source with a minimum of fuss.

--
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
 
L

LJ

Thanks Doug - I appreciate what you are saying re the formatting - but I
would like to be able to send the email in HTML to maintain the formatting of
bullet points for example - and as the email already has a PDF attachment, so
would it be possible for you to let me know how I would need, and at which
point in your code etc, I would need to modify your original code. I'm using
office 2003.
Many thanks
 
D

Doug Robbins - Word MVP

I would suggest that you ask the question in an Outlook newsgroup. I have
no experience in that field.

--
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top