【问题标题】:How to filter an Outlook view in VBA based on "To" email addresses如何根据“收件人”电子邮件地址过滤 VBA 中的 Outlook 视图
【发布时间】:2019-09-19 08:21:51
【问题描述】:

我在 Outlook 中有一个视图,其中包括来自邮箱的“发件人”和“收件人”电子邮件

我可以很容易地在 Outlook 搜索框中输入一个电子邮件地址,然后视图将立即被过滤以显示所有来自该电子邮件地址的电子邮件(可能还包括主题中包含此电子邮件地址的任何其他电子邮件或身体,但这不是问题)

我想通过 VBA 复制此过程 - 我有一个包含详细联系信息的 Access 数据库,并且希望能够根据数据库中的联系人电子邮件地址简单地过滤此视图。

这似乎是一个非常简单的问题,但我找不到解决方案。我有代码,例如根据发件人电子邮件地址进行过滤,但似乎无法过滤“收件人”电子邮件地址(我可以过滤“收件人”显示名称,但这几乎没用 - 它与一封电子邮件不同到另一个,并且很少包含实际的电子邮件地址)

我有一个 DASL 过滤器代码,可以使用 DASL 语法过滤“发件人”电子邮件地址,如下所示:

Const SchemaFrom As String = "urn:schemas:httpmail:fromemail"
Dim EM as string
EM = "myemail@me.com"
objView.Filter = Chr(34) & SchemaFrom & Chr(34) & " = '" & EM & "'"

但“收件人”电子邮件没有类似之处。

最终我什至不需要基于例如“发件人”和“收件人”电子邮件地址进行过滤 - 如果有办法对此进行编码,那么就像在搜索框中一样,它只需过滤任何文本字段包含我可以接受的电子邮件地址!!!

例如,是否有一个通用的 DASL 搜索可以做到这一点,所以不需要在例如 fromemail 中指定搜索?

非常感谢所有帮助 - 在 Outlook 的 GUI 中操作非常简单,肯定可以通过 VBA 实现吗?!

【问题讨论】:

  • 你为什么使用 DASL ?
  • @RonanVico:我正在使用 DASL,因为根据 Microsoft 文档,VBA 中 View.Filter 的字符串过滤器是 DASL:“这个属性的值是一个字符串,在 DAV 搜索和定位 (DASL) 语法”很高兴使用任何其他合适的方法,您可以建议它是否可行!
  • 作为附录,我发现 DASL 存在一个非常奇怪的问题。您可以使用 Outlook 筛选器对话框为您创建 DASL。但它的工作方式很奇怪,例如,我可以在对话框的“发送到”字段中输入一个电子邮件地址,然后按 OK 这完全符合我的需要(显示发送到该电子邮件地址的所有电子邮件,而不仅仅是那些其中电子邮件地址在“DisaplayTo”名称中。太棒了!这会生成以下 DASL 代码:
  • ("http://schemas.microsoft.com/mapi/proptag/0x0e04001f" CI_STARTSWITH 'mymail@gmail.com' OR "http://schemas.microsoft.com/mapi/proptag/0x0e03001f" CI_STARTSWITH 'mymail@gmail.com') 但是,当您在 VBA 中使用此代码时,过滤器仅显示电子邮件地址在“DisaplayTo”字段中的电子邮件,而不是像以前一样的所有电子邮件,即我得到 2 个不同的结果,一个从对话框中,一个在代码中,据说是相同的 DASL 查询!!!

标签: vba outlook outlook-filter


【解决方案1】:

应该是

Dim Filter As String
    Filter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:fromemail" & _
                       Chr(34) & " Like '%0m3r 0m3r%'"

或者使用

Filter = "[SenderEmailAddress] = '0m3r@email.com'"

例子

Option Explicit
Private Sub Examples()
    Dim olNs As Outlook.NameSpace
    Dim Inbox As Outlook.MAPIFolder
    Dim Item As Outlook.MailItem
    Dim Items As Outlook.Items
    Dim msg As String

    Set olNs = Application.GetNamespace("MAPI")
    Set Inbox = olNs.GetDefaultFolder(olFolderInbox)

    Dim Filter As String
        Filter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:fromemail" & _
                           Chr(34) & " Like '%0m3r 0m3r%'"

    Set Items = Inbox.Items.Restrict(Filter)

    msg = Items.Count & " Items in " & Inbox.Name

    MsgBox (msg)

End Sub

MSDN fromemail Field | Microsoft Docs

https://stackoverflow.com/search?tab=votes&q=user%3a4539709%20%5boutlook-filter%5d

【讨论】:

  • 事实上,对于 View.Filter DASL,不需要添加“@SQL=”(请参阅​​ Microsoft 文档上的示例:docs.microsoft.com/en-us/office/vba/api/outlook.view.filter)正如我所指出的,发布的代码有效好的,我正在尝试找到“收件人”电子邮件地址的等效项(注意,它必须是电子邮件地址而不是显示名称)仅供参考我也不希望返回我可以检查的集合等 - 我想要结果在 Outlook 窗口中返回,以便用户看到过滤后的电子邮件。非常感谢您提供的任何帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 2012-09-20
  • 1970-01-01
  • 2010-10-28
  • 2018-01-30
  • 2020-01-21
相关资源
最近更新 更多