首页 文章

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

提问于
浏览
1

我创建了一个与outlook和excel一起使用的宏,它将使用电子邮件地址列表(在excel中)并向所有这些地址发送电子邮件(在outlook中) . 我想拿一个word文档(来自microsoft word)并将其用作电子邮件的正文 . 问题是,我将在word文档中有图像,我需要word文档来保持它的格式 . 现在,我的VBA获取了我的word文档的内容,但格式化已经消失,图像不包括在内 . 这是我的代码:

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

我在谷歌搜索了一个解决方案,但我还没找到 . 我如何发送word文档作为电子邮件的正文,其中包含格式和图像?

2 回答

  • 0

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

    像这样的东西:

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

    如果不是图像,则可以将文档另存为HTML文件,读取其内容,然后设置MailItem.HTMLBody属性 .

    图像更复杂 . 我没有看到将它们带入消息体的简单方法 .

相关问题