【问题标题】:How do I reply to outlook mail using vba in excel with mail thread?如何在带有邮件线程的 excel 中使用 vba 回复 Outlook 邮件?
【发布时间】:2022-04-18 17:57:50
【问题描述】:

我正在寻找 excel 中的 VBA 代码来回复选定的邮件,但下面的代码会创建单独的邮件,该邮件在正文中的对话(线程)中没有以前的消息。我在网上搜索,但其中大多数是目前无法使用的旧代码。请帮忙。

Sub Test_template()
    
    Dim emailApplication As Object
    Dim emailItem As Object
    
    Set emailApplication = CreateObject("Outlook.Application")
    Set emailItem = emailApplication.ActiveExplorer.Selection.Item(1).ReplyAll
    
    emailItem.bcc = "XYZ.com"
    
    emailItem.Body = "Hi, have a nice day "
    
    emailItem.Display
    
    Set emailItem = Nothing
    Set emailApplication = Nothing
    
End Sub

【问题讨论】:

    标签: excel vba outlook office-automation


    【解决方案1】:

    这是你正在尝试的吗?我已经评论了代码并提供了相关的 MSDN 链接。如果您仍然遇到困难,请直接询问。

    Option Explicit
    
    Sub Sample()
        Dim OutlookApp As Object
        Dim OutlookMail As Object
    
        Set OutlookApp = CreateObject("Outlook.Application")
        Set OutlookMail = OutlookApp.ActiveExplorer.Selection.Item(1)
        
        '~~> Get MailItem.GetConversation method (Outlook)
        ' https://docs.microsoft.com/en-us/office/vba/api/outlook.mailitem.getconversation
        Dim OutlookConversation As Object
        Set OutlookConversation = OutlookMail.GetConversation
    
        '~~> Conversation.GetTable method (Outlook)
        ' https://docs.microsoft.com/en-us/office/vba/api/outlook.conversation.gettable
        Dim OutlookTable As Object
        Set OutlookTable = OutlookConversation.GetTable
        
        '~~> Obtains a 2D array from the Table.
        ' https://docs.microsoft.com/en-us/office/vba/api/outlook.table.getarray
        Dim OutlookAr As Variant
        OutlookAr = OutlookTable.GetArray(OutlookTable.GetRowCount)
        
        Dim OutlookReplyToThisMail As Object
        Set OutlookReplyToThisMail = OutlookMail.Session.GetItemFromID(OutlookAr(UBound(OutlookAr), 0))
        
        Dim MyMessage As String: MyMessage = "Hi, have a nice day "
        
        With OutlookReplyToThisMail.ReplyAll
            .BCC = "XYZ.com"
            .HTMLBody = MyMessage & .HTMLBody
            .Display
        End With
    End Sub
    

    【讨论】:

    • 谢谢,它正在工作。却又多了一个疑问。我无法插入新行。例如 Dim MyMessage As String: MyMessage = "Hi," & vbNewLine & "have a nice day" 输出 - Hi, have a nice day 为什么 vbNewLine 不起作用?
    • 因为我们在 HTML 正文中使用该文本,而 vbNewLine 没有任何意义。尝试这个。 MyMessage = "Hi," & "<br>" & "have a nice day "
    • 这很有效,直到您的电子邮件具有非常相似的主题行。 GetConversation 方法似乎选择了较旧的电子邮件。
    【解决方案2】:

    .ReplyAll 产生预期结果,但被emailItem.Body = "Hi, have a nice day " 覆盖。

    Option Explicit
    
    Sub Test_template()
        
        Dim emailApplication As Object
        Dim emailItem As Object
        
        'Set emailApplication = CreateObject("Outlook.Application")
        
        ' mail has to be slelected in Outlook application so it has to be open already
        Set emailApplication = GetObject(, "Outlook.Application")
        Set emailItem = emailApplication.ActiveExplorer.Selection.Item(1).ReplyAll
        
        emailItem.BCC = "XYZ.com"
        
        'emailItem.Body = "Hi, have a nice day "
        
        emailItem.Body = "Hi, have a nice day " & emailItem.Body
        
        ' or
        'emailItem.htmlBody = "Hi, have a nice day " & emailItem.htmlBody
        
        emailItem.Display
        
        Set emailItem = Nothing
        Set emailApplication = Nothing
        
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2022-08-14
      • 2016-06-24
      • 1970-01-01
      • 2013-05-27
      • 2015-09-03
      • 1970-01-01
      • 1970-01-01
      • 2022-12-13
      • 1970-01-01
      相关资源
      最近更新 更多