按降序排列电子邮件

问题描述 投票:0回答:1

我遍历所有电子邮件以查找具有特定主题行的电子邮件。

它总是从最旧的开始,并且要花很多时间,因为大多数邮件都是最新的。

Dim outMailItem As Outlook.MailItem
Dim inputDate As String, subjectFilter As String
Dim saveInFolder As   String
Dim filesys, newfolder, newfolderpath
OutlookOpened = False
On Error Resume Next
Set outApp = GetObject(, "Outlook.Application")
If Err.Number <> 0 Then
Set outApp = New Outlook.Application
OutlookOpened = True
End If
On Error GoTo 0

If outApp Is Nothing Then
MsgBox "Cannot start Outlook.", vbExclamation
Exit Sub
End If

Set outNs = outApp.GetNamespace("MAPI")

Set outFolder = outNs.Folders("Personal Folders").Folders("Inbox")  
'Set outFolder = outNs.PickFolder                                   
Set outItems = outFolder.Items

If Not outFolder Is Nothing Then
    outItems.Sort "[ReceivedTime]", False
    For Each outItems In outFolder.Items
        If outItems.Class = Outlook.OlObjectClass.olMail Then

            Set outMailItem = outItems
            randomdate = Format(outMailItem.SentOn, "dd/mm/yy")
            If outMailItem.Subject = subjectFilter Then

                If randomdate = inputDate1 Then

                    Debug.Print outMailItem.Subject
                    For Each outAttachment In outMailItem.Attachments
                        outAttachment.SaveAsFile saveInFolder & outAttachment.Filename
                    Next
                End If
            End If
        End If
    Next

我已经按照排序顺序尝试了True和False。

vba outlook-vba
1个回答
2
投票

您为什么需要遍历all个项目?使用Items.Find / FindNext查找Subject属性值的匹配项。

set outMailItem = outItems.Find("[Subject] = '" & subjectFilter & "'")

如果有多个匹配项,则可以使用Findf / FindNext遍历所有匹配项

set outMailItem = outItems.Find("[Subject] = '" & subjectFilter & "'")
while Not (outMailItem  Is Nothing)
  'do something with outMailItem 
  set outMailItem  = outItems.FindNext
wend
© www.soinside.com 2019 - 2024. All rights reserved.