vba - 如何确定日期是否在 .ReceivedTime 中?
问题描述
我编写了一个脚本来获取我自己的已发送电子邮件列表。它直到最近才起作用。
它适用于 2021/07 或更早的月份,但它无法收到任何 2021/08 电子邮件。
我想这是由某些缓存原因引起的(可能某些电子邮件尚不存在于本地文件夹中)。
Sub get_Sent_mail()
On Error Resume Next
Dim olApp As Outlook.Application
Dim nmsName As NameSpace
Dim mail As mailitem
Dim text1 As String
sent_month = "2021/8"
Set olApp = Outlook.Application
Set nmsName = olApp.GetNamespace("MAPI")
For Each mail In nmsName.Folders("abc@efd.com").Folders("inbox").Folders("Sent Emails").Items
If InStr(mail.ReceivedTime, sent_month) <> 0 Then
Debug.Print mail.subject
End If
Next
End Sub
解决方案
您依靠本地设置将日期时间值转换mail.ReceivedTime
为字符串。该字符串可能包含月份名称而不是数字或带有前导 0 的数字。或者年/月序列可以不同(m/y vs y/m)
您需要显式检索月份和年份数字并将它们视为整数
If (Month(mail.ReceivedTime) = 8) AND (Year(mail.ReceivedTime) = 2021) Then
Debug.Print mail.subject
End If
更糟糕的是,您的代码效率极低——就像编写没有 WHERE 子句的 SQL 查询一样。你真的需要使用Items.Restrict
:
set items = nmsName.Folders("abc@efd.com").Folders("inbox").Folders("Sent Emails").Items
set restrictedItems = items.Restrict("[ReceivedTime] >= '2021/08/01' AND [ReceivedTime] < '2021/09/01'")
for each mail in restrictedItems
Debug.Print mail.subject
next
推荐阅读
- javascript - 猫鼬模式上的加入/查找聚合
- java - 在信标上循环
- javascript - 使用 Google Chrome Extensions API 中的 PageStateMatcher 过滤元标记中包含特定关键字的网页
- javascript - 检查是否选中了所有复选框,然后将类添加到某些东西
- javascript - 使用循环多次更改html属性
- python - Selenium:进行显式等待时的部分文本匹配
- listview - 在聊天布局中使用 Listview
- tensorflow - Tensorflow,Tensorflow的sparse_categorical_crossentropy中的from_logits = True or False是什么意思?
- css - 如何将图像叠加到 div 元素上
- mongodb - 将数据集字段从类型字符串转换为模式,但现在我不再得到任何结果