2015-01-14 2 views
3

기본 VBA 코드를 사용하여 매일 내 스프레드 시트 복사본을 이메일로 보냅니다. 이메일 제목은 항상 같습니다.동일한 Outlook 대화에서 VBA를 사용하여 이메일 보내기

이러한 전자 메일이 Outlook에 동일한 대화로 나타나도록하려는 경우 대화보기를 사용할 때 이러한 전자 메일이 중첩/스레드되도록합니다. 그러나 이러한 이메일은 항상 새로운 대화로 나옵니다.

.subject 등과 비슷한 OutMail 변수의 속성을 설정하여 이메일이 중첩 된 것처럼 보이도록 항상 내 ConversationID/ConversationIndex를 만들 수 있습니까?

VBA 코드 :

Dim Source As Range 'For Tips see: http://www.rondebruin.nl/win/winmail/Outlook/tips.htm 
Dim Dest As Workbook 
Dim wb As Workbook 
Dim TempFilePath As String 
Dim TempFileName As String 
Dim FileExtStr As String 
Dim FileFormatNum As Long 
Dim OutApp As Object 
Dim OutMail As Object 




Set Source = Nothing 
On Error Resume Next 
Set Source = Range("A1:AQ45").SpecialCells(xlCellTypeVisible) 
On Error GoTo 0 

If Source Is Nothing Then 
    MsgBox "The source is not a range or the sheet is protected, please correct and try again.", vbOKOnly 
    Exit Sub 
End If 

With Application 
    .ScreenUpdating = False 
    .EnableEvents = False 
End With 

Set wb = ActiveWorkbook 
Set Dest = Workbooks.Add(xlWBATWorksheet) 

Source.Copy 
With Dest.Sheets(1) 
    .Cells(1).PasteSpecial Paste:=8 
    .Cells(1).PasteSpecial Paste:=xlPasteValues 
    .Cells(1).PasteSpecial Paste:=xlPasteFormats 
    .Cells(1).Select 
    Application.CutCopyMode = False 
End With 

TempFilePath = "C:\temp\" 
TempFileName = "MyReport " & Format(Now, "yyyy-mm-dd hh-mm-ss") 
FileExtStr = ".xlsx": FileFormatNum = 51 

Set OutApp = CreateObject("Outlook.Application") 
Set OutMail = OutApp.CreateItem(0) 


With Dest 
    .SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum 
    On Error Resume Next 
End With 


With Dest 
    With OutMail 
     .to = "[email protected]" 
     .CC = "" 
     .BCC = "" 
     .Subject = "Subject Report 1" 
     .HTMLBody = RangetoHTML(Range("A1:AQ45")) 
     .Attachments.Add Dest.FullName 
     .Send 
    End With 
End With 



Set OutMail = Nothing 
Set OutApp = Nothing 

With Application 
    .ScreenUpdating = True 
    .EnableEvents = True 
End With 



With Dest 
    On Error GoTo 0 
    .Close savechanges:=False 
End With 
+0

'ConversationID'와'ConversationIndex'는 모두 읽기 전용 속성입니다. 대화 내용을 보존해야하는 해당 메시지의 한 메시지에 대한 회신으로 기존 대화의 전자 메일을 처리하려고 시도하는 것이 좋습니다. –

+0

강력하게 관련 : https://stackoverflow.com/q/8806882/321973 –

+0

예보기 https://msdn.microsoft.com/en-us/library/ms527456(v=exchg.10).aspx –

답변

1

이것은 당신이, 내가 위의 의견 제시 방법을 Excel로 이상의 포트를 사용 할 수있는 전망 코드입니다.

Sub test() 
Dim m As MailItem 
Dim newMail As MailItem 
Dim NS As NameSpace 
Dim convo As Conversation 
Dim cItem 
Dim entry As String 'known conversationID property 

Set NS = Application.GetNamespace("MAPI") 

'Use the EntryID of a known item 
'## MODIFY THIS BASED ON YOUR ENTRYID PROPERTY!! ## 
entry = "0000000019EF3F5F49714748915AA379833C20460700D6CCDE850A3B9D41A5B930CCE1E12030000337DBD42F00003C7DFC9FAAF8254DACC71DEEEC1DF0A30003ADA9AF2D0000" 

'Get a handle on this item: 
Set m = NS.GetItemFromID(entry) 

'Get a handle on the existing conversation 
Set convo = m.GetConversation 

'Get a handle on the conversation's root item: 
Set cItem = convo.GetRootItems(1) 

'Create your new email as a reply thereto: 
Set newMail = cItem.Reply 

'Modify the new mail item as needed: 
With newMail 
    .To = "" 
    .CC = "" 
    .BCC = "" 
    .Subject = "Subject Report 1" 
    .HTMLBody = RangeToHTML(Range("A1:AQ45")) 
    .Attachments.Add Dest.FullName 
    .Display 
    '.Send 
End With 

End Sub 
+0

감사합니다. 네 도움 데이비드! 저는 초보자입니다. 이 기능을 사용하려면 내 Excel VBA에 참조 라이브러리를 추가해야합니까? Microsoft Outlook 15 메일 라이브러리를 추가했습니다. 디버거는 이제 아래에서 멈 춥니 다. 그리고 디버거를 실행하는 방법을 알 수 없습니다. NS = Application.GetNamespace ("MAPI") 오류 코드 : 런타임 오류 438, 개체가이 속성 또는 메서드를 지원하지 않습니다. 감사합니다 :) –

+0

제 코드에서,'Application'은 Outlook을 가리 킵니다. 코드를 포팅 할 때 Outlook의 인스턴스가 'OutApp'이므로'OutApp.GetNameSpace ("MAPI")'가 그 트릭을 수행해야합니다. 문제가있는 경우 구현하려는 코드를 표시하도록 질문을 수정하십시오. 나는 당신을 위해 그것을 조정할 것입니다. –

+0

David. 다음 디버거에서 중지합니다 설정 m = NS.GetItemFromID (항목) 내 entryID 속성을 기반으로 항목 변수를 수정해야하는 것을 참조하십시오. entryID 속성은 어디에서 찾을 수 있습니까? 모든 도움을 주셔서 다시 한 번 감사드립니다. –

관련 문제