Search code examples
vbaoutlookoutlook-filter

How to filter items sendername from Items_ItemAdd Events?


Private WithEvents Items As Outlook.Items

Private Sub Application_Startup()
  Dim Ns As Outlook.NameSpace
  Dim Folder As Outlook.MAPIFolder

  Set Ns = Application.GetNamespace("MAPI")
  Set Folder = Ns.GetDefaultFolder(olFolderInbox)
  Set Items = Folder.Items
End Sub

Private Sub Items_ItemAdd(ByVal Item As Object)
  If TypeOf Item Is Outlook.MailItem Then
    Printattachments Item
  End If
End Sub

I made a rule so outlook will automatically print any incoming email with attachment, with exception of few coworkers'email.

If I stop the rule the macro will not be working on its own(supposing it should,Code error?) but if the rule's enabled every email with attachment will be printed twice.

one with every page and one with only the first page. Is there any way to work around this? Kindly assist and thanks in advance!


Solution

  • Work with Items.Restrict Method (Outlook) to exclude senders name. by Filtering Items

    Example

    Private WithEvents Items As Outlook.Items
    Private Sub Application_Startup()
        Dim olNs As Outlook.NameSpace
        Dim Inbox  As Outlook.MAPIFolder
        Dim Filter As String
    
        Filter = "@SQL=" & " Not (urn:schemas:httpmail:fromname" & _
                           " Like '%Ming Lian%' Or " & _
                                 "urn:schemas:httpmail:fromname" & _
                           " Like '%0m3r 0mr%')"
    
    
        Set olNs = Application.GetNamespace("MAPI")
        Set Inbox = olNs.GetDefaultFolder(olFolderInbox)
        Set Items = Inbox.Items.Restrict(Filter)
    
    End Sub
    

    Make sure to update %Ming Lian% with correct name and now you don't need Outlook Rule

    Items.Restrict method is an alternative to using the Find method or FindNext method to iterate over specific items within a collection. The Find or FindNext methods are faster than filtering if there are a small number of items. The Restrict method is significantly faster if there is a large number of items in the collection, especially if only a few items in a large collection are expected to be found.


    Filtering Items Using a String Comparison that DASL filters support includes equivalence, prefix, phrase, and substring matching. Note that when you filter on the Subject property, prefixes such as "RE: " and "FW: " are ignored.