【问题标题】:Automate Outlook Emails with Attachments in Excel在 Excel 中使用附件自动化 Outlook 电子邮件
【发布时间】:2021-07-02 07:21:50
【问题描述】:

我有一个包含以下 5 列的 Excel 电子表格:

  1. 发票号码、2) 公司、3) 主要电子邮件地址、4) 次要电子邮件地址、5) 帐号

我还有一个包含发票的文件夹。每张发票的文件名中都有发票编号——即 Inv_123456.pdf

我想构建一个 Excel 宏,当我提供发票编号列表时,它将:

  1. 打开一封电子邮件——收件人:
  2. 在主题中填写发票编号,然后
  3. 转到包含发票的文件夹并附上名为 InvNo_*.pdf 的相应发票,即 InvNo_123456.pdf

对每个发票编号重复此操作,并显示电子邮件以供查看。 *最初,我想显示带有附件的电子邮件,直到我对宏按预期工作感到满意为止。

包含预填发票的文件夹的路径是 -- C:\Users\christma-2\OneDrive - OurYear2Win\Documents\Clorodet\Invoice Emails\Attachments\Invoice_*.pdf

以下是我目前创建的宏。我想提取具有相应发票编号的发票并将其附加到电子邮件中。

Sub Send_Email_to_List()

Dim OL As Object, MailSendItem As Object
Dim MsgTxt As String

Set OL = CreateObject("Outlook.Application")

For Each xCell In ActiveSheet.Range(Range("C1"), Range("C" & Rows.Count).End(xlUp))

    user_email = xCell.Value
    user_subject = "Subject Line for the Email"
    user_msg = "Thank You For Submitting this email"

    Set MailSendItem = OL.CreateItem(olMailItem)

    With MailSendItem
        .Subject = user_subject
        .Body = user_msg
        .To = user_email
        .CC = " "
        .Bcc = "clorodet20607@aol.com"
'I need help getting the correct attachment, putting the invoice number in the subject, and cc'ing the secondary contacts
        .Attachments.Add ("C:\Users\christma-2\OneDrive - OurYear2Win\Documents\Clorodet\Invoice Emails\Attachments\W1\???.pdf")
        .Display
    End With

Next xCell

Set OL = Nothing

End Sub

【问题讨论】:

    标签: email attachment


    【解决方案1】:

    查找相应联系人的电子邮件地址 -- To:

    您可以使用CreateRecipient 方法创建一个Recipient 对象。收件人姓名;它可以是一个字符串,表示收件人的显示名称、别名或完整的 SMTP 电子邮件地址。因此,无需搜索联系人。

    Sub ResolveName()  
     Dim myNamespace As Outlook.NameSpace  
     Dim myRecipient As Outlook.Recipient  
     Dim CalendarFolder As Outlook.Folder 
     
     Set myNamespace = Application.GetNamespace("MAPI")  
     Set myRecipient = myNamespace.CreateRecipient("Eugene Astafiev")  
    
     myRecipient.Resolve  
    
     If myRecipient.Resolved Then  
       Call ShowCalendar(myNamespace, myRecipient)  
     End If 
     
    End Sub  
     
    Sub ShowCalendar(myNamespace, myRecipient)  
     Dim CalendarFolder As Folder 
     
     Set CalendarFolder = myNamespace.GetSharedDefaultFolder(myRecipient, olFolderCalendar) 
     
     CalendarFolder.Display 
     
    End Sub
    

    您可以使用以下调用序列获取Contact 实例:

    recipient.AddressEntry.GetContact()
    

    Outlook 对象模型支持自定义邮件正文的三种主要方式:

    1. Body 属性返回或设置表示 Outlook 项目的明文正文的字符串。
    2. MailItem 类的HTMLBody 属性返回或设置表示指定项的 HTML 正文的字符串。设置HTMLBody 属性将始终立即更新 Body 属性。例如:
         Sub CreateHTMLMail() 
           'Creates a new e-mail item and modifies its properties. 
           Dim objMail As Outlook.MailItem 
           'Create e-mail item 
           Set objMail = Application.CreateItem(olMailItem) 
           With objMail 
            'Set body format to HTML 
            .BodyFormat = olFormatHTML 
            .HTMLBody = "<HTML><BODY>Enter the message <a href="http://google.com">text</a> here. </BODY></HTML>" 
            .Display 
           End With 
         End Sub
    
    1. Word 对象模型可用于处理消息体。请参阅Chapter 17: Working with Item Bodies 了解更多信息。

    请注意,MailItem.BodyFormat 属性允许您以编程方式更改用于项目正文的编辑器。

    【讨论】:

    • 感谢您的回复。我将从大型数据库中提取记录,同时将电子邮件发送给列表中的选定人数。我对 CreateRecipient 方法的理解需要一次响应 1,所以我认为 CreateRecipient 方法不适用于我的情况。
    • 找到具有指定姓名或电子邮件地址的联系人就是您所需要的。您可以根据需要设置Recipients 集合。
    • 我的 vlookup 工作正常。我需要帮助从文件夹中提取相应的发票并将其附加到电子邮件中,处理电子邮件的主题行以使其包含发票编号,并填充 CC:电子邮件的一部分。很抱歉我不清楚,但我非常感谢你能提供的任何帮助。
    猜你喜欢
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2014-06-27
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多