gpt4 book ai didi

excel - 从 VBA 搜索 Outlook 电子邮件

转载 作者:行者123 更新时间:2023-12-04 20:30:43 24 4
gpt4 key购买 nike

给定的代码成功运行。它在 Outlook 已发送邮件文件夹中搜索电子邮件主题。搜索基于特定时间段内的特定日期进行。例如,下面的代码查找 2018 年 7 月 20 日上午 12:00 到晚上 11:59 之间发送的电子邮件标题“周五发送的测试电子邮件”。

除了我现有的搜索条件之外,我如何过滤发送给特定用户的电子邮件。我想检查 [To] 字段。如果 [To] 有收件人 x@email.com、y@email.com 或 z@email.com,则不要返回搜索结果。如果 [To] 部分没有以下任何一个电子邮件:x@email.com、y@email.com 或 z@email.com,则搜索应返回“是。已找到电子邮件”。

 Public Function is_email_sent()
Dim olApp As Object
Dim olNs As Object
Dim olFldr As Object
Dim olItms As Object
Dim objItem As Object

On Error Resume Next
Set olApp = CreateObject("Outlook.Application")

Set olNs = olApp.GetNamespace("MAPI")
Set olFldr = olNs.Folders("myemail@example.com").Folders("Sent Items")

Set olItms = olFldr.Items
Set objItem = olItms.Restrict("[Subject] = ""Test Email Sent on Friday"" And [SentOn] >= ""7/20/2018 12:00 AM"" AND [SentOn] <= ""7/20/2018 11:59 PM""")
If objItem.Count = 0 Then
MsgBox "No. Email not found"
Else
MsgBox "Yes. Email found"
End If

Set olApp = Nothing
Set olNs = Nothing
Set olFldr = Nothing
Set olItms = Nothing
Set objItem = Nothing
End Function

最佳答案

这可能不是您正在寻求的方法,但如果您添加对 Outlook 的项目引用,您可以使用 native 数据类型而不是将所有内容都视为对象,并且 Intellisense 可以成为您最好的 friend 。

enter image description here

优点是不用猜测 Restrict 中的查询字符串是什么。方法,您可以简单地遍历所有邮件项目,然后使用 native 属性来查找您要查找的邮件。这是您在上面确定的规范的示例。

 Public Function is_email_sent()
Dim olApp As Outlook.Application
Dim olNs As Outlook.Namespace
Dim olFldr As Outlook.Folder
Dim olItms As Outlook.Items
Dim objItem As Outlook.MailItem
Dim recipients() As String
Dim found As Boolean

found = False

On Error Resume Next
Set olApp = New Outlook.Application

Set olNs = olApp.GetNamespace("MAPI")
Set olFldr = olNs.Folders("myemail@example.com").Folders("Sent Items")

For Each objItem In olFldr.Items
If objItem.Subject = "Test Email Sent on Friday" And _
objItem.SentOn >= DateSerial(2018, 7, 20) And _
objItem.SentOn < DateSerial(2018, 7, 21) Then

If InStr(objItem.To, "x@email.com") = 0 And _
InStr(objItem.To, "y@email.com") = 0 And _
InStr(objItem.To, "z@email.com") = 0 Then

found = True
Exit For

End If

End If
Next objItem

当然,你可以去掉类引用,它仍然可以工作,但就像我说的,让 Intellisense 成为你的 friend 。

有一些按顺序进行的微优化(即预先声明日期而不是在每个循环迭代中运行 DateSerial),但这是一个概念性的想法来证明我的观点。

关于excel - 从 VBA 搜索 Outlook 电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51450541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com