Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Outlook VBA-分别保存附件和电子邮件_Vba_Outlook - Fatal编程技术网

Outlook VBA-分别保存附件和电子邮件

Outlook VBA-分别保存附件和电子邮件,vba,outlook,Vba,Outlook,用户将选择一封电子邮件,我需要将其所有附件保存到一个文件夹+该电子邮件不带附件保存在一个单独的文件夹中 我已经编写了代码,除了一个大问题外,它似乎工作得很好: 附件将从原始电子邮件和我的收件箱中删除。删除附件后,我将调用SaveAs方法,因此我认为不应该发生这种情况。 以下是我编写的代码: Dim objMailItemOriginal As Outlook.MailItem Dim objMailItemNew As Outlook.MailItem Dim objNameS

用户将选择一封电子邮件,我需要将其所有附件保存到一个文件夹+该电子邮件不带附件保存在一个单独的文件夹中

我已经编写了代码,除了一个大问题外,它似乎工作得很好:

附件将从原始电子邮件和我的收件箱中删除。删除附件后,我将调用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

请找outlook专家?

我能想到的唯一方法是保存包含附件的电子邮件,然后从磁盘打开保存的电子邮件并处理其中的附件

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