'How do I reply to outlook mail using vba in excel with mail thread?

I am looking for VBA code in excel to reply to a selected mail but the below code creates seperate mail which does not have previous messages in conversation (thread) in body. I searched online, but most of them are old codes which are not working currently. Please help.

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


Solution 1:[1]

Is this what you are trying? I have commented the code and provided relevant MSDN links. If you still get stuck then simply ask.

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

Solution 2:[2]

.ReplyAll produces the expected result but is overwritten by 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

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Siddharth Rout
Solution 2 niton