使用Excel VBA回复选定的Outlook电子邮件

agxfikkp  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(343)

使用Excel VBA,我想回复我在Outlook应用程序中选择/突出显示的电子邮件。
根据我选择电子邮件的顺序,有不同的电子邮件和主题行。
有回复错误的电子邮件。它应该回复那些我在Outlook中突出显示的邮件。
例如,当我选择三封电子邮件时,有两封回复正确,但另一封回复了我没有突出显示的电子邮件。

Sub SendEmail()
    Dim OutlookApp As Object
    Dim OutlookMail As Object  
    i = 1

    Do While Not IsEmpty(Cells(i + 1, 4))  
        Set OutlookApp = CreateObject("Outlook.Application")
        Set OutlookMail = OutlookApp.ActiveExplorer.Selection.Item(i)   
        Dim OutlookConversation As Object
        Set OutlookConversation = OutlookMail.GetConversation  
        Dim OutlookTable As Object
        Set OutlookTable = OutlookConversation.GetTable 
        Dim OutlookAr As Variant
        OutlookAr = OutlookTable.GetArray(OutlookTable.GetRowCount)
        Dim OutlookReplyToThisMail As Object
        Set OutlookReplyToThisMail = OutlookMail.Session.GetItemFromID(OutlookAr(UBound(OutlookAr), 0))
        With OutlookReplyToThisMail.ReplyAll
            .Subject = Sheet1.Cells(1 + i, 15) & "_" & .Subject
            .HTMLBody = "<p style='font-family:calibri;font-size:13'>" & _
            Sheet1.Cells(34, 2 + i) & "<br>" & "<br>" & _
            Sheet1.Cells(35, 2 + i) & "<br>" & "<br>" & _
            Sheet1.Cells(36, 2 + i) & Signature & .HTMLBody
            .Display     
        End With 

        i = i + 1
    Loop
End Sub
sbdsn5lh

sbdsn5lh1#

首先,在循环中创建一个新的Outlook Application示例实际上不是一个好主意:

Do While Not IsEmpty(Cells(i + 1, 4))  
        Set OutlookApp = CreateObject("Outlook.Application")

相反,请考虑将创建线移动到循环之前的上方:

Set OutlookApp = CreateObject("Outlook.Application")

Do While Not IsEmpty(Cells(i + 1, 4))

在该代码中,您将遍历Excel单元格并在Outlook中获取相应的选定项。
它应该只回复那些我在outlook电子邮件中突出显示的。
如果需要迭代Outlook中的所有选定项目,则不需要依赖Excel的数据,而是根据选定项目的数量获得一个单独的循环。例如:

Dim myOlExp As Outlook.Explorer  
 Dim myOlSel As Outlook.Selection 
 Set myOlExp = OutlookApplication.ActiveExplorer  
 Set myOlSel = myOlExp.Selection  
 For x = 1 To myOlSel.Count  
   If myOlSel.Item(x).Class = OlObjectClass.olMail Then  
     ' For mail item, use the SenderName property. 
     Set oMail = myOlSel.Item(x)  
     Debug.Print oMail.SenderName 
   End If
 Next

相关问题