excel - 对于每个循环不是从收件箱中的最新电子邮件开始,而是从旧电子邮件开始
问题描述
我正在编写一个 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
我需要知道为什么它没有从文件夹中的最新邮件开始。
解决方案
你很幸运,之前处理的邮件最先处理。要确定您必须排序的顺序。
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
推荐阅读
- function - 事件场景内的电晕功能位置
- r - 在 R 中使用聚合时如何保留其他列?
- django - 使用 Gunicorn 和 Nginx 在一个 Droplet 上运行两个 Django 项目
- r - 使用 mutate_at 缩短多个 dplyr 变异?
- php - 喜欢 jQuery 求和值
- javascript - 为什么我不能将图表添加到动态插入的 svg 元素?
- r - R,ImageMagick:如何在动画中的每个循环后添加延迟
- c# - 如何根据访问级别显示菜单选项?
- powerbi - POWER BI - 创建一个度量来比较预测与销售额
- javascript - 默认接收器上的 Chromecast WebVTT 字幕