如何使用VBA将Word文档作为电子邮件正文发送 [英] How to send a Word document as body of an email with VBA

查看:1024
本文介绍了如何使用VBA将Word文档作为电子邮件正文发送的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个与Outlook和Excel配合使用的宏,该宏将使用电子邮件地址列表(在Excel中)并向所有这些地址发送一封电子邮件(在Outlook中).我想提取一个Word文档(来自Microsoft Word)并将其用作电子邮件的正文.问题是,我将在word文档中包含图像,并且需要word文档来保持其格式.现在,我的VBA接收了我的Word文档的内容,但是格式不见了,并且不包含图像.这是我的代码:

I've created a macro that works with outlook and excel that will use a list of email addresses (in excel) and send all those addresses an email (in outlook). I want to take a word document (from microsoft word) and use it as the body of the email. The problem is, I will have images in the word document and I need the word document to keep it's formatting. Right now, my VBA takes the content of my word document but the formatting is gone and images aren't included. This is my code:

Sub spamEmail()
   'Setting up the Excel variables.
   Dim olApp As Object
   Dim oMail As Outlook.MailItem
   Dim iCounter As Integer
   Dim Dest As Variant
   Dim SDest As String
   Dim Excel As Object
   Dim Name As String
   Dim Word As Object
   Dim oAccount As Outlook.Account
   Dim doc As Word.Document
   Dim itm As Object
   Dim MsgTxt As String

   'Set the outlook account to send.
   Set oAccount = Application.Session.Accounts.Item(2)

   'Create excel object.
   Set Excel = CreateObject("excel.application")
   Excel.Visible = True
   Excel.Workbooks.Open ("C:\Users\Deryl Lam\Documents\Book1.xlsx")
   Excel.Workbooks("Book1.xlsx").Activate

   'Create a word object.
   Set Word = CreateObject("word.application")
   Set doc = Word.Documents.Open _
   (FileName:="C:\Users\Deryl Lam\Documents\emailBody.docx", ReadOnly:=True)
   'Pulls text from file for message body
    MsgTxt = doc.Range(Start:=doc.Paragraphs(1).Range.Start, _
    End:=doc.Paragraphs(doc.Paragraphs.Count).Range.End)

   'Loop through the excel worksheet.
       For iCounter = 1 To WorksheetFunction.CountA(Workbooks("Book1.xlsx").Sheets(1).Columns(1))

           'Create an email for each entry in the worksheet.
           Set oMail = Application.CreateItem(olMailItem)
           With oMail
            SDest = Cells(iCounter, 1).Value
            If SDest = "" Then
             'Dont do anything if the entry is blank.
            Else
             'Do additional formatting on the BCC and Subject lines, add the body text from the spreadsheet, and send.
             Name = Cells(iCounter, 2).Value
             .BCC = SDest
             .Subject = "FYI"
             .Body = "Dear " & Name & "," & vbCrLf & MsgTxt

             'SendUsingAccount is new in Office 2007
             'Change Item(1)to the account number that you want to use
             .SendUsingAccount = oAccount

             .Send
            End If
           End With
       Next iCounter


   'Clean up the Outlook application.
   Set olMailItm = Nothing
   Set olApp = Nothing

End Sub

我已经在整个Google上搜索了一种解决方案,但没有找到一种解决方案.如何以文字格式和包含的图像格式发送Word文档作为电子邮件的正文?

I've searched all over google for a solution but I haven't found one. How can I send a word document as the body of the email with it's formatting in tact and the images included?

推荐答案

您将以字符串形式获取模板文档的内容,根据定义,该字符串将不包含任何格式或图像.您应该将内容复制到剪贴板,然后将其粘贴到新电子邮件中.

You are getting the contents of your template document as a string, which by definition will not contain any formatting or images. You should instead copy the contents to the clipboard and then paste them into the new email.

类似这样的东西:

Sub emailFromDoc()
    Dim wd As Object, editor As Object
    Dim doc As Object
    Dim oMail As MailItem

    Set wd = CreateObject("Word.Application")
    Set doc = wd.documents.Open(...path to your doc...)
    doc.Content.Copy
    doc.Close
    set wd = Nothing

    Set oMail = Application.CreateItem(olMailItem)
    With oMail
        .BodyFormat = olFormatRichText
        Set editor = .GetInspector.WordEditor
        editor.Content.Paste
        .Display
    End With
End Sub

这篇关于如何使用VBA将Word文档作为电子邮件正文发送的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆