Для каждого цикла не начинается с последней электронной почты в папке «Входящие», он начинается с более старой электронной почты - PullRequest
0 голосов
/ 07 октября 2019

Я пишу код Excel vba, который перебирает указанную папку в outlook и получает "MailItem" для дальнейшей обработки. Он работал нормально до тех пор, пока не было выполнено обновление пакета MS Office до 2016 года. Теперь, когда цикл запускается, он отбирает почту, которая была там непосредственно перед обновлением офиса. Почему это не начинается с последней почты, которая находится в папке?

Добавление кода здесь.

Я попытался создать новый файл Excel с поддержкой макросов, набрал код и запустил его. Результат тот же.

Sub sortexcelPrintLog()
Dim olApp As Outlook.Application
Dim ns As Outlook.Namespace
Dim folder As Outlook.folder
Dim mitem As MailItem
Dim item As Object
Dim i As Long
Dim dirPath As String
Dim s_directory As String
Dim wb As Workbook
Dim ws As Worksheet
Dim checkDate As Date
Dim ws2 As Worksheet
Dim j As Integer
Dim printLogs As Collection
Dim plog As pClass
Dim temptime As Date
Dim printlogName As String
Dim CDlogName As String
Dim logFlag As String
Dim dayname As String
Dim comparerecall As String
Dim lrow As Long

Set printLogs = New Collection


Set wb = ThisWorkbook
checkDate = Format(Now(), "mm/dd/yyyy")
dayname = Format(checkDate, "dddd")
Set olApp = New Outlook.Application

Set ns = olApp.GetNamespace("MAPI")
Set folder = ns.GetDefaultFolder(olFolderInbox) '.Folders("printlog")
i = 1

If dayname = "Monday" And CDate(Format(Now(), "hh:mm:ss AM/PM")) - 
TimeValue("01:00:00") > TimeValue("10:00:00 AM") Then
MsgBox folder.Name
For Each item In folder.Items
If TypeName(item) = "MailItem" Then
Set mitem = item

If Format(item.ReceivedTime, "mm/dd/yyyy") = checkDate - 3 Then


                If (CDate(Format(mitem.ReceivedTime, "hh:mm:ss AM/PM")) - 
TimeValue("01:00:00")) >= TimeValue("03:00:00 PM") Then
                        If LCase(mitem.Subject) Like LCase("Portland Claims*") Or _
                                LCase(mitem.Subject) Like LCase("Property Letter Trident Claim_TNT*") Or _
                                LCase(mitem.Subject) Like LCase("Property Letter Denver Claims*") Or _
                                LCase(mitem.Subject) Like LCase("Portland Claims*") Or _
                                LCase(mitem.Subject) Like LCase("Property Letter Alteris Claims*") Or _
                                LCase(mitem.Subject) Like LCase("Portland Claim*") Or _
                                LCase(mitem.Subject) Like LCase("recall*") Then
                            Set plog = New pClass
                            plog.Name = WorksheetFunction.VLookup(mitem.Sender, Worksheets("Agents").Range("A:B"), 2, 0)
                            plog.Subject = mitem.Subject
                            plog.SDate = Format(mitem.ReceivedTime, "mm/dd/yyyy")
                            plog.Docs = Docs(mitem.Subject)
                            plog.pages = pages(mitem.Subject)
                            plog.DTim = mitem.ReceivedTime

                            printLogs.Add plog
                        End If
                End If



        ElseIf Format(item.ReceivedTime, "mm/dd/yyyy") < checkDate - 3 
Then
            Exit For
        ElseIf Format(item.ReceivedTime, "mm/dd/yyyy") > checkDate - 3 Then
            GoTo nextbreak
        End If
         End If
nextbreak:
    Next
End If
End sub

Мне нужно знать, почему он не запускается с последней почты в папке.

1 Ответ

0 голосов
/ 07 октября 2019

Вам повезло, что почта, обработанная ранее в первую очередь. Чтобы быть уверенным в заказе, вы должны отсортировать.

Option Explicit

Sub sortItems()

    Dim olApp As Outlook.Application
    Dim olNs As Outlook.Namespace
    Dim olFldr As Outlook.folder

    Dim olItem As Object
    Dim olFldrItems As items
    Dim mItem As MailItem

    Set olApp = New Outlook.Application
    Set olNs = olApp.GetNamespace("MAPI")
    Set olFldr = olNs.GetDefaultFolder(olFolderInbox)

    ' Do not attempt to sort items in the folder, olFldr.items, directly
    ' Sort a collection of items
    Set olFldrItems = olFldr.items
    olFldrItems.Sort "[ReceivedTime]", True

    For Each olItem In olFldrItems
        If TypeName(olItem) = "MailItem" Then
            Set mItem = olItem
            Debug.Print Format(mItem.ReceivedTime, "mm/dd/yyyy") & " " & mItem.Subject
        End If
    Next

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...