Ответить на конкретное письмо Outlook, используя VBA с настроенным текстом / темой - PullRequest
0 голосов
/ 03 июля 2018
Sub Display()
Dim myMail As Outlook.MailItem
Dim myReply As Outlook.MailItem
Dim numItems As Integer
Dim mySelected As Selection
Dim i As Integer
Dim myText As String
Dim signature As String

signature = Environ("appdata") & "\Microsoft\Signatures\"
If Dir(signature, vbDirectory) <> vbNullString Then
    signature = signature & Dir$(signature & "*.htm")
Else:
    signature = ""
End If
signature = CreateObject("Scripting.FileSystemObject").GetFile(signature).OpenAsTextStream(1, -2).ReadAll
Set mySelected = Outlook.ActiveExplorer.Selection
numItems = mySelected.Count

For i = 1 To numItems
Set myMail = mySelected(1)
Set myReply = myMail.Reply
myText = myMail.Body
myReply.Subject = "RO Finalized WF: Annual Review. Entity"
myText = "Hi All," & vbCrLf & vbCrLf & "Worflow ID:" & vbCrLf & vbCrLf & "infoinfoinfoinfo" & vbCrLf & vbCrLf & "Thanks," & vbCrLf & "Josh" & signature
myReply.HTMLBody = myText & vbCrLf & vbCrLf & myMail.HTMLBody 
Myreply.display
  Set myMail = Nothing
  Set myReply = Nothing
Next
Set mySelected = Nothing
End Sub

Приведенный выше код отображает ответ на электронное письмо, которое вы в настоящее время открыли в Outlook, включая информацию о том, кто его отправил (помещено в To :), и весь текст электронного письма, которое вы в данный момент открыли в Outlook.

Это то, что я хочу сделать, за исключением того, что вместо того, чтобы отвечать на открытое письмо, я хочу, чтобы оно отвечало на письмо конкретно по его теме. Также я хочу, чтобы он включал в себя именно то, что все ответы включают в Outlook (строка, разделяющая каждое электронное письмо, с отображением From :, Sent,: To :, CC :, Subject: предыдущего сообщения). Кроме того, vbCrLf не выполняет свои функции после MyText.

Я бы также хотел разместить CC: из предыдущего письма в CC создаваемого мной письма.

Я не эксперт по VBA и постарался столько, сколько мог придумать. Заранее спасибо за помощь :)

Я нашел другой вариант, и код отображается ниже. Это заполнит ответное письмо со всем, что мне нужно , за исключением моего настроенного тела.

Sub Display()

Dim olApp As Outlook.Application
Dim olNs As Namespace
Dim Fldr As MAPIFolder
Dim olMail As Variant
Dim i As Integer

Dim IsExecuted As Boolean

 signature = Environ("appdata") & "\Microsoft\Signatures\"
 If Dir(signature, vbDirectory) <> vbNullString Then
    signature = signature & Dir$(signature & "*.htm")
Else:
    signature = ""
End If
signature = CreateObject("Scripting.FileSystemObject").GetFile(signature).OpenAsTextStream(1, -2).ReadAll
Set olApp = New Outlook.Application
Set olNs = olApp.GetNamespace("MAPI")
Set Fldr = olNs.GetDefaultFolder(olFolderInbox)
IsExecuted = False
For Each olMail In Fldr.Items
If InStr(olMail.Subject, "checklist") <> 0 Then
If Not IsExecuted Then
        With olMail.ReplyAll

    .HTMLBody = "Dear All," & "<br>" & signature


        End With
    IsExecuted = True
    olmail.ReplyAll.Display
End If
End If
Next olMail
End Sub

Решение

Sub Display()
Dim olApp As Outlook.Application
Dim olNs As Namespace
Dim Fldr As MAPIFolder
Dim olMail As Variant
Dim i As Integer
Dim IsExecuted As Boolean
signature = Environ("appdata") & "\Microsoft\Signatures\"
If Dir(signature, vbDirectory) <> vbNullString Then
signature = signature & Dir$(signature & "*.htm")
Else:
signature = ""
End If
signature = CreateObject("Scripting.FileSystemObject").GetFile(signature).OpenAsTextStream(1, -2).ReadAll
Set olApp = New Outlook.Application
Set olNs = olApp.GetNamespace("MAPI")
Set Fldr = olNs.GetDefaultFolder(olFolderInbox)

IsExecuted = False
For Each olMail In Fldr.Items
If InStr(olMail.Subject, "Subject") <> 0 Then
If Not IsExecuted Then

    With olMail.ReplyAll

.HTMLBody = "<p>" & "Dear All," & "</p><br>" & signature & .HTMLBody

.Display
  End With
IsExecuted = True


End If
End If
Next olMail
End Sub
...