如何基于“收件人”电子邮件地址在VBA中过滤Outlook视图

时间:2019-04-30 16:06:24

标签: vba outlook outlook-vba outlook-filter

我在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进行吗?!

1 个答案:

答案 0 :(得分:0)

应该是

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