capser
capser

Reputation: 2635

Move items based on multiple values of SenderName

I move email from my inbox to the test folder.

How do I add more sender names?

Instead of moving just 'ABC Sprockets', move 'DFG Widgets' and 'XYZ Zippers' as well in one script.

Sub MoveItems()
    Dim myNameSpace As Outlook.NameSpace
    Dim myInbox As Outlook.Folder
    Dim myDestFolder As Outlook.Folder
    Dim myItems As Outlook.Items
    Dim myItem As Object

    Set myNameSpace = Application.GetNamespace("MAPI")
    Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
    Set myItems = myInbox.Items
    Set myDestFolder = myInbox.Folders("test")
    Set myItem = myItems.Find("[SenderName] = 'ABC Sprockets'")
    While TypeName(myItem) <> "Nothing"
        myItem.Move myDestFolder
        Set myItem = myItems.FindNext
    Wend
End Sub

Upvotes: 0

Views: 249

Answers (2)

Eugene Astafiev
Eugene Astafiev

Reputation: 49397

You need to specify every condition in the search string explicitly:

Set myItem = myItems.Find("[SenderName] = 'ABC Sprockets' OR [SenderName] = 'DFG Widgets' OR [SenderName] = 'XYZ Zippers'")

Upvotes: 1

z32a7ul
z32a7ul

Reputation: 3777

I can't test it because I don't have Outlook on my home computer but I recommend looping through an Array of Strings that contains your search terms:

Sub MoveItems()
    Dim myNameSpace As Outlook.Namespace
    Dim myInbox As Outlook.Folder
    Dim myDestFolder As Outlook.Folder
    Dim myItems As Outlook.Items
    Dim myItem As Object

    Set myNameSpace = Application.GetNamespace("MAPI")
    Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
    Set myItems = myInbox.Items
    Set myDestFolder = myInbox.Folders("test")
    Dim varSearchTerm As Variant: For Each varSearchTerm In Array("ABC Sprockets", "DFG Widgets", "XYZ Zippers")
    Set myItem = myItems.Find("[SenderName] = '" & varSearchTerm & "'")
        While TypeName(myItem) <> "Nothing"
            myItem.Move myDestFolder
            Set myItem = myItems.FindNext
        Wend
    Next
End Sub

You may also move the enumeration of your search terms like this:

Dim varSearchTerms As Variant: varSearchTerms = Array("ABC Sprockets", "DFG Widgets", "XYZ Zippers")
' ...
Dim varSearchTerm As Variant: For Each varSearchTerm In varSearchTerms
Set myItem = myItems.Find("[SenderName] = '" & varSearchTerm & "'")
' ...
Next

Upvotes: 1

Related Questions