![](/img/trans.png)
[英]vba code save attachments of email with specific object in a folder - outlook 365
[英]Outlook VBA - Save Attachments and Email separately
用戶將選擇一封電子郵件,我需要將其所有附件保存到一個文件夾+該電子郵件沒有附件在一個單獨的文件夾中。
我已經編寫了代碼,它似乎工作正常,除了一個大問題:
附件也會從我的收件箱中從原始電子郵件中刪除。 刪除附件后,我正在調用 SaveAs 方法,所以我認為這不應該發生。
這是我寫的代碼:
Dim objMailItemOriginal As Outlook.MailItem
Dim objMailItemNew As Outlook.MailItem
Dim objNameSpaceUserNS As Outlook.namespace
Dim emailPath$, tmpFolder$
Set objMailItemOriginal = Application.ActiveExplorer.Selection(1)
Set objMailItemNew = Application.CreateItem(olMailItem)
Set objNameSpaceUserNS = Application.GetNamespace("MAPI")
tmpFolder = Environ("Temp") & "\" & Format$(Now, "hh_mm_ss")
MkDir tmpFolder
emailPath = Environ$("Temp") & "\tmpEmail.msg"
Dim attachPath$
For i = objMailItemOriginal.Attachments.Count To 1 Step -1
attachPath = tmpFolder & "\" & objMailItemOriginal.Attachments(i)
objMailItemOriginal.Attachments(i).SaveAsFile attachPath
objMailItemNew.Attachments.Add attachPath
objMailItemOriginal.Attachments.Remove (i)
Next
objMailItemOriginal.SaveAs emailPath
objMailItemOriginal.Close olDiscard
請問有什么前景專家嗎?
我能想到的唯一方法是保存包含附件的電子郵件,然后從磁盤打開保存的電子郵件並使用其中的附件。
Sub workwithmail(pathfile As string)
Dim oNamespace As Outlook.NameSpace
Set oNamespace = Application.GetNamespace("MAPI")
Dim oSharedItem As Outlook.mailitem
Dim pathfile As String
Set oSharedItem = oNamespace.OpenSharedItem(pathfile)
'''here Comes your code
oSharedItem.Close (olSave)
Set oSharedItem = Nothing
Set oNamespace = Nothing
End Sub
不要從原始項目中刪除附件。 使用 MailItem.SaveAs 將消息保存為 MSG 文件,使用 Application.Session.OpenSharedItem 重新打開它(返回 MailItem 對象)並從該對象中刪除附件。 然后調用 MailItem.Save。
要減小沒有附件的文件大小,您可以這樣做:
oSharedItem.SaveAs "filePath here"
oSharedItem.Close olDiscard
然后附件還在outlook explorer的原始郵件中,保存的文件變小了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.