简体   繁体   English

如何使用VBA将Word文档作为电子邮件正文发送

[英]How to send a Word document as body of an email with VBA

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). 我创建了一个与outlook和excel一起使用的宏,它将使用电子邮件地址列表(在excel中)并将所有这些地址发送给电子邮件(在outlook中)。 I want to take a word document (from microsoft word) and use it as the body of the email. 我想拿一个word文档(来自microsoft word)并将其用作电子邮件的正文。 The problem is, I will have images in the word document and I need the word document to keep it's formatting. 问题是,我将在word文档中有图像,我需要word文档来保持它的格式。 Right now, my VBA takes the content of my word document but the formatting is gone and images aren't included. 现在,我的VBA获取了我的word文档的内容,但格式化已经消失,图像不包括在内。 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

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? 我如何发送word文档作为电子邮件的正文,其中包含格式和图像?

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. 您应该将内容复制到剪贴板,然后将其粘贴到新电子邮件中。

Something like this: 像这样的东西:

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

If not for the images, you could save the document as an HTML file, read its contents, then set the MailItem.HTMLBody property. 如果不是图像,则可以将文档另存为HTML文件,读取其内容,然后设置MailItem.HTMLBody属性。

Images are more involved. 图像更复杂。 I don't see a straightforward way to bring them into a message body. 我没有看到将它们带入消息体的简单方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Excel VBA 将电子邮件正文添加为 Word 文档中的文本 - Excel VBA add Email body as text from a word document 如何使用 vba 从 Word 文档中提取电子邮件地址 - How extract email address from Word document using vba 在电子邮件正文中插入Word.Document? - Insert Word.Document in email body? 如何使用 VBA 从 Word 文档中提取未知数量的电子邮件地址/所有电子邮件地址 - How to extract unknown amount of email addresses / all email addresses from Word document using VBA 如何在电子邮件正文中发送工作表? - How to send worksheet in email body? 使用 Excel VBA 发送带有粘贴到电子邮件正文中的过滤器范围的电子邮件 - Send Email With A Filter Range Pasted Into Email Body using Excel VBA 如何将格式化文本从 Word 文档复制到富文本格式 email 正文? - How to copy formatted text from Word document to Rich Text Format email body? 选择Word文档的内容并用VBA将其粘贴到Outlook的正文中 - Select the content of Word document and paste it into the body of Outlook with VBA 使用VBA,如何将选定的Excel单元格发送到具有html格式的电子邮件正文? - using VBA how can I send a selection of Excel Cells to an Email Body with html formatting? 如何使用 Excel VBA 从 Thunderbird 发送 email 主体中的图像? - How can I send an image in the email body from Thunderbird with Excel VBA?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM