如何基于“在VBA中筛选Outlook视图”;至;电子邮件地址

如何基于“在VBA中筛选Outlook视图”;至;电子邮件地址,vba,outlook,outlook-filter,Vba,Outlook,Outlook Filter,我在Outlook中有一个视图,其中包括来自邮箱的“发件人”和“收件人”电子邮件 我可以很容易地在Outlook搜索框中键入电子邮件地址,视图将立即被过滤,以显示进出该电子邮件地址的所有电子邮件(加上可能在主题或正文中包含此电子邮件地址的任何其他电子邮件,但这不是问题) 我希望通过VBA复制此过程-我有一个带有联系人详细信息的Access DB,并且希望能够根据DB中的联系人电子邮件地址简单地筛选此视图 这似乎是一个很简单的问题,但我找不到解决办法。我有一些代码,例如根据发件人电子邮件地址进行过

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

我可以很容易地在Outlook搜索框中键入电子邮件地址,视图将立即被过滤,以显示进出该电子邮件地址的所有电子邮件(加上可能在主题或正文中包含此电子邮件地址的任何其他电子邮件,但这不是问题)

我希望通过VBA复制此过程-我有一个带有联系人详细信息的Access DB,并且希望能够根据DB中的联系人电子邮件地址简单地筛选此视图

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

我有一个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文档,View的字符串筛选器。VBA中的筛选器是DASL:“此属性的值是字符串,在DAV搜索和定位(DASL)语法中”很高兴使用任何其他适当的方法,您可以建议它是否有效!作为附录,我发现DASL在这方面存在一个非常奇怪的问题。可以使用Outlook筛选器对话框为您创建DASL。但它的工作原理很奇怪,例如,我可以在对话框的“发送到”字段中输入一个电子邮件地址,然后按“确定”,这完全符合我的需要(显示发送到此电子邮件地址的所有电子邮件,而不仅仅是那些电子邮件地址位于“displayto”名称中的电子邮件。太好了!!这将生成以下DASL代码:
("http://schemas.microsoft.com/mapi/proptag/0x0e04001f“CI_STARTSWITH”mymail@gmail.com“或”http://schemas.microsoft.com/mapi/proptag/0x0e03001f“CI_STARTSWITH”mymail@gmail.com')
但是,当您在VBA中使用此代码时,过滤器仅在“DisaplayTo”字段中显示电子邮件地址,而不是像以前那样显示所有电子邮件,即我得到两个不同的结果,一个来自对话框,一个在代码中,假设具有相同的DASL quesry!!!事实上,对于视图。过滤器DASL无需添加“@SQL=”(请参阅Microsoft docs上的示例:)正如我所指出的,发布的代码工作正常,我正在尝试为“收件人”电子邮件地址找到等效的地址(注意,它必须是电子邮件地址,而不是显示名称)仅供参考,我也不希望返回我可以检查的收藏等-我希望在Outlook窗口中返回结果,以便用户看到过滤后的电子邮件。任何您可以提供的帮助都将不胜感激!
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