Search code examples
vbaoutlookoutlook-filter

Outlook mail item multiple restrict methods


I am trying to apply a filter using the restrict method of mail items using Outlook VBA. Below code works fine if I use only one restrict method based on Category_Filter variable, but when I try to use two restrict methods,

Somehow my Flag_Filter fails.

I believe I am making some mistake in concatenation for Flag_Filter and need some clue here.

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

Solution

  • like @Dmitry Streblechenko says use And Operator (Visual Basic) MSDN with your Outlook restrict method

    Example

    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

    for variable you can use the chr(34) function to represent the double quote (whose ASCII character value is 34) that is used as an escape character or use double quote.

    Example

    Dim OrderNumber As String
    OrderNumber = "GCU5689"    
    Filter = "[Categories] = 'Textile' And [FlagRequest] = '" & OrderNumber & "'"