Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba Outlook邮件项目多个限制方法_Vba_Outlook_Outlook Filter - Fatal编程技术网

Vba Outlook邮件项目多个限制方法

Vba Outlook邮件项目多个限制方法,vba,outlook,outlook-filter,Vba,Outlook,Outlook Filter,我正在尝试使用Outlook VBA的邮件项目限制方法应用筛选器。如果我只使用一个基于Category_Filter变量的restrict方法,下面的代码可以正常工作,但是当我尝试使用两个restrict方法时 不知怎的,我的标志过滤器失败了 我相信我在连接Flag_过滤器时犯了一些错误,需要一些线索 Sub ApplyFilters() Dim ol As Outlook.Application Dim ns As Outlook.NameSpace Dim fol As Outlook.Fo

我正在尝试使用Outlook VBA的邮件项目限制方法应用筛选器。如果我只使用一个基于Category_Filter变量的restrict方法,下面的代码可以正常工作,但是当我尝试使用两个restrict方法时

不知怎的,我的标志过滤器失败了

我相信我在连接Flag_过滤器时犯了一些错误,需要一些线索

Sub ApplyFilters()
Dim ol As Outlook.Application
Dim ns As Outlook.NameSpace
Dim fol As Outlook.Folder
Dim i As Object
Dim mi As Outlook.MailItem

Dim OrderNumber, Category_Filter, Flag_Filter As String

Set ol = New Outlook.Application
Set ns = ol.GetNamespace("MAPI")
Set fol = ns.GetDefaultFolder(olFolderInbox)


OrderNumber = "GCU5689"

Category_Filter = "[Categories] = 'Textile'"
Flag_Filter = "[FlagRequest] = " & OrderNumber


For Each i In fol.Items.Restrict(Category_Filter).Restrict(Flag_Filter)

 ' Some actions

Next i

End Sub

不能限制受限集合。您需要将限制(使用“and”)组合到一个查询中,并只调用一次
Restrict

您不能限制一个受限制的集合。您需要将限制(使用“and”)组合到一个查询中,并只调用一次
Restrict

通常,您可以一次一个地应用多个操作。这种方法允许更容易地进行故障排除

“代码>选项显式”考虑此强制 “工具|选项|编辑器”选项卡 '需要变量声明 子应用过滤器() Dim ns作为名称空间 Dim fol As文件夹 将i作为对象 将mi设置为邮件项 将尺寸调整为项目 Dim OrderNumber作为字符串 Dim Category_过滤器作为字符串 Dim Flag_过滤器作为字符串 设置ns=GetNamespace(“MAPI”) Set fol=ns.GetDefaultFolder(olFolderInbox) OrderNumber=“GCU5689” Category_Filter=“[Categories]”为“纺织品” Flag_Filter=“[FlagRequest]=”&订单号 设置resItms=fol.Items.Restrict(类别过滤器) Debug.Print“首次限制后的项目:”&resItms.Count 设置resItms=resItms.Restrict(标志过滤器) Debug.Print“第二次限制后的项目:”&resItms.Count 对于resItms中的每个i "一些行动, '例如,如果仅在mailitems上找到属性 如果i.Class=olmail,则 设置mi=i 调试.Print mi.Subject 如果结束 下一个 端接头
通常,您可以一次一个应用多个操作。这种方法允许更容易地进行故障排除

“代码>选项显式”考虑此强制 “工具|选项|编辑器”选项卡 '需要变量声明 子应用过滤器() Dim ns作为名称空间 Dim fol As文件夹 将i作为对象 将mi设置为邮件项 将尺寸调整为项目 Dim OrderNumber作为字符串 Dim Category_过滤器作为字符串 Dim Flag_过滤器作为字符串 设置ns=GetNamespace(“MAPI”) Set fol=ns.GetDefaultFolder(olFolderInbox) OrderNumber=“GCU5689” Category_Filter=“[Categories]”为“纺织品” Flag_Filter=“[FlagRequest]=”&订单号 设置resItms=fol.Items.Restrict(类别过滤器) Debug.Print“首次限制后的项目:”&resItms.Count 设置resItms=resItms.Restrict(标志过滤器) Debug.Print“第二次限制后的项目:”&resItms.Count 对于resItms中的每个i "一些行动, '例如,如果仅在mailitems上找到属性 如果i.Class=olmail,则 设置mi=i 调试.Print mi.Subject 如果结束 下一个 端接头 就像@Dmitry Streblechenko说的使用你的

范例

对于变量,您可以使用
chr(34)
函数表示用作转义字符的双引号(其ASCII字符值为34)或使用双引号

范例

就像@Dmitry Streblechenko说的使用你的

范例

对于变量,您可以使用
chr(34)
函数表示用作转义字符的双引号(其ASCII字符值为34)或使用双引号

范例


谢谢你们两位。尼顿,你的建议很有魅力。谢谢你们两位。尼顿,你的建议很有魅力。嗨,尼顿,正如前面提到的代码可以很好地工作,但是,某些已查找的电子邮件同时满足这两个条件,但它们不会被过滤器发现。同样,这些只是给我带来问题的几个订单。你能想一想导致这个问题的任何这样的原因吗。我检查了每封未被发现的电子邮件,发现它们都有两个标记,即分类和标记。我可以建议尝试一个限制,然后再尝试另一个,看看是否两个都分别失败。您可以使用结果和当前代码尝试一个新的问题帖子。Hi Niton,正如您所说,我没有发现类别的记录跳过问题,跳过问题只发生在FlagRequest中。您可以问一个新问题,关于
FlagRequest
限制跳过项目的原因。Hi Niton,正如前面提到的代码一样,但是,某些已查找的电子邮件同时满足这两个条件,但未被过滤器检测到。同样,这些只是给我带来问题的几个订单。你能想一想导致这个问题的任何这样的原因吗。我检查了每封未被发现的电子邮件,发现它们都有两个标记,即分类和标记。我可以建议尝试一个限制,然后再尝试另一个,看看是否两个都分别失败。您可以使用结果和当前代码尝试一个新的问题帖子。您好,尼顿,正如您所说,我没有发现类别的记录跳过问题,跳过问题只发生在FlagRequest中。您可以问一个新问题,关于
FlagRequest
限制跳过项目的原因。您好,在我的情况下,我可以使用常量值[类别]中的“纺织品”,但[FlagRequest]表示订单号的代码正在从邮件合并文档中提取。实际上,我在邮件合并文档中使用此代码,该文档依赖Outlook中的电子邮件标记信息,并将订单号邮件合并字段与过滤电子邮件的FlagRequest值相比较。这有点复杂,但这就是我正在做的。因此,回到你的解决方案,你会如何改变你的过滤器,使其使用一个变量来代替常量?我希望你明白我的意思。嗨,0m3r,在我的情况下,我同意为[Categories]使用常量值“Tebrite”,但[FlagRequest]表示订单号的代码是从邮件合并文档中提取的。实际上,我在邮件合并文档中使用此代码,该文档依赖于Outlook中的电子邮件标记信息,并比较订单号邮件
Option Explicit
Private Sub Examples()
    Dim olNs As Outlook.NameSpace
    Dim Inbox As Outlook.MAPIFolder
    Dim Items As Outlook.Items
    Dim Msg As String
    Dim i As Long
    Dim Filter As String

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

    Filter = "[Categories] = 'Textile' And [FlagRequest] = 'Follow up'"

    Set Items = Inbox.Items.Restrict(Filter)

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

    If MsgBox(Msg, vbYesNo) = vbYes Then
        For i = Items.Count To 1 Step -1
            Debug.Print Items(i) 'Immediate Window
        Next
    End If
End Sub
Dim OrderNumber As String
OrderNumber = "GCU5689"    
Filter = "[Categories] = 'Textile' And [FlagRequest] = '" & OrderNumber & "'"