Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
Excel宏用于将Outlook 2010附件、最旧电子邮件保存为最新电子邮件_Excel_Vba_Outlook - Fatal编程技术网

Excel宏用于将Outlook 2010附件、最旧电子邮件保存为最新电子邮件

Excel宏用于将Outlook 2010附件、最旧电子邮件保存为最新电子邮件,excel,vba,outlook,Excel,Vba,Outlook,需要将excel附件保存在Outlook电子邮件中,从最旧的电子邮件保存到最新的电子邮件,并将电子邮件标记为已读。如果有多封未读电子邮件,则较新的附件将覆盖较旧的附件 我每天都会收到大量需要保存以运行报告的电子邮件。但是,如果丢失了一个报告,它将被忽略,我将转到下一个数据集。下面的方法可以工作,但并不总是先保存最旧的…它会跳转 我已经尝试了很多方法来挽救最老的第一个,但没有运气。任何关于我如何做到这一点的帮助,请先使用最旧的电子邮件。谢谢 Sub Save_Attachments() D

需要将excel附件保存在Outlook电子邮件中,从最旧的电子邮件保存到最新的电子邮件,并将电子邮件标记为已读。如果有多封未读电子邮件,则较新的附件将覆盖较旧的附件

我每天都会收到大量需要保存以运行报告的电子邮件。但是,如果丢失了一个报告,它将被忽略,我将转到下一个数据集。下面的方法可以工作,但并不总是先保存最旧的…它会跳转

我已经尝试了很多方法来挽救最老的第一个,但没有运气。任何关于我如何做到这一点的帮助,请先使用最旧的电子邮件。谢谢

Sub Save_Attachments()
    Dim olApp As Outlook.Application, olNameSpace As Outlook.Namespace
    Dim olFolder As Outlook.MAPIFolder, olMail As Outlook.MailItem
    Dim olAttachment As Outlook.Attachment, lngAttachmentCounter As Long
    Dim i As String
On Error GoTo Oooops
    Set olApp = New Outlook.Application
    Set olNameSpace = olApp.GetNamespace("MAPI")
    Set olFolder = olNameSpace.GetDefaultFolder(olFolderInbox).Folders("sub_folder")
    If olFolder Is Nothing Then Exit Sub
    For Each olMail In olFolder.Items
        If olMail.UnRead = True Then
             For Each olAttachment In olMail.Attachments
                lngAttachmentCounter = lngAttachmentCounter + 1
                olAttachment.SaveAsFile ThisWorkbook.Path & "\zzzzz.xls"
            Next olAttachment
        End If
        If olMail.UnRead Then
            olMail.UnRead = False
        End If
    Next olMail
    Exit Sub
Oooops:
    MsgBox Err.Description, vbExclamation, "An error occurred"
End Sub

由于您没有说明您尝试的选项,可能您没有尝试

For j = olFolder.Items.count To 1 Step -1 
像这样的

Option Explicit

 Sub Save_Attachments_ReverseOrder()

    Dim olApp As Outlook.Application, olNameSpace As Outlook.Namespace
    Dim olFolder As Outlook.MAPIFolder
    Dim olMail As Object ' <-- olMail is not necessarily a mailitem
    Dim olAttachment As Outlook.attachment, lngAttachmentCounter As Long
    Dim j As Long

    On Error GoTo Oooops

    Set olApp = New Outlook.Application
    Set olNameSpace = olApp.GetNamespace("MAPI")
    Set olFolder = olNameSpace.GetDefaultFolder(olFolderInbox).Folders("sub_folder")

    If olFolder Is Nothing Then Exit Sub

    For j = olFolder.Items.count To 1 Step -1    

        Set olMail = olFolder.Items(j)
        If TypeOf olMail Is mailitem Then
            If olMail.UnRead = True Then

                Debug.Print olMail.subject & " - " & olMail.ReceivedTime

                 'For Each olAttachment In olMail.Attachments
                 '   lngAttachmentCounter = lngAttachmentCounter + 1
                 '   olAttachment.SaveAsFile ThisWorkbook.Path & "\zzzzz.xls"
                 'Next olAttachment

                 olMail.UnRead = False             

            Else

                Debug.Print vbCr & olMail.subject & " - " & olMail.ReceivedTime & " was previously read"

            End If     

        Else

            Debug.Print vbCr & "Current item is not a mailitem."      

        End If      

    Next j

    Exit Sub

Oooops:

    MsgBox Err.Description, vbExclamation, "An error occurred"

End Sub
选项显式
子保存\u附件\u反向顺序()
Dim olApp作为Outlook.Application,olNameSpace作为Outlook.Namespace
将文件夹设置为Outlook.MAPIFolder
将邮件作为对象'