Outlook邮件项目多种限制方法

问题描述 投票:1回答:3

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

以某种方式我的Flag_Filter失败。

我相信我在Flag_Filter的串联中犯了一些错误,在这里需要一些线索。

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
vba outlook-vba outlook-filter
3个回答
1
投票

通常,您一次可以执行多项操作。这种方法可以简化故障排除。

Option Explicit ' Consider this mandatory
' Tools | Options | Editor tab
' Require Variable Declaration

Sub ApplyFilters()

Dim ns As NameSpace
Dim fol As folder

Dim i As Object
Dim mi As MailItem

Dim resItms As Items

Dim OrderNumber  As String
Dim Category_Filter As String
Dim Flag_Filter As String

Set ns = GetNamespace("MAPI")
Set fol = ns.GetDefaultFolder(olFolderInbox)

OrderNumber = "GCU5689"

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

Set resItms = fol.Items.Restrict(Category_Filter)
Debug.Print "Items after first  restrict: " & resItms.Count

Set resItms = resItms.Restrict(Flag_Filter)
Debug.Print "Items after second restrict: " & resItms.Count

For Each i In resItms

    ' Some actions

    ' If, for instance, a property is only found on mailitems
    If i.Class = olmail Then
        Set mi = i
        Debug.Print mi.Subject
    End If

Next

End Sub

1
投票

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


0
投票

像@Dmitry Streblechenko所说的And Operator (Visual Basic) MSDNOutlook restrict method一起使用

示例

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

More examples here

© www.soinside.com 2019 - 2024. All rights reserved.