Move e-mails by senderemailaddress outlook macro

為{幸葍}努か 提交于 2020-01-17 11:15:12

问题


I want to move some messages from Inbox to a subfolder but this code (that I have copied from other forum) is not working. Can you tell me what is going wrong? Do you think it is not working because of the fact that I have two different accounts in this Outlook?


Public Sub Move_Items()
   '// Declare your Variables
    Dim Inbox As Outlook.MAPIFolder
    Dim SubFolder As Outlook.MAPIFolder
    Dim olNs As Outlook.NameSpace
    Dim Item As Object
    Dim Items As Outlook.Items
    Dim lngCount As Long

    On Error GoTo MsgErr
    Set Inbox Reference
    Set olNs = Application.GetNamespace("MAPI")
    Set Inbox = Application.ActiveExplorer.CurrentFolder
    Set Items = Inbox.Items

   '// Loop through the Items in the folder backwards
    For lngCount = Inbox.Items.Count To 1 Step -1
        Set Item = Inbox.Items.Item(lngCount)

        If Item.Class = olMail Then
            Select Case Item.SenderEmailAddress

               '// Email_One
                Case "bb"
                   // Set SubFolder of Inbox
                    Set SubFolder = Inbox.Folders("BB")
                    Set Item = Items.Find("[SenderEmailAddress] = 'bb@gmail.com'")
                    If TypeName(Item) <> "Nothing" Then
                       // Mark As Read
                        Item.UnRead = False
                       // Move Mail Item to sub Folder
                        Item.Move SubFolder
                    End If

              '// Email_Two
                Case "aa"
                   '// Set SubFolder of Inbox
                    Set SubFolder = Inbox.Folders("AA")
                    Set Item = Items.Find("[SenderEmailAddress] = 'aa@gmail.com'")
                    If TypeName(Item) <> "Nothing" Then
                       '// Mark As Read
                        Item.UnRead = False
                       '// Move Mail Item to sub Folder
                        Item.Move SubFolder
                    End If

                Case Else:
                    Exit Sub
            End Select
        End If
    Next lngCount

MsgErr_Exit:
    Set Inbox = Nothing
    Set SubFolder = Nothing
    Set olNs = Nothing
    Set Item = Nothing
    Set Items = Nothing

    Exit Sub

'// Error information
MsgErr:
    MsgBox "An unexpected Error has occurred." _
         & vbCrLf & "Error Number: " & Err.Number _
         & vbCrLf & "Error Description: " & Err.Description _
         , vbCritical, "Error!"
    Resume MsgErr_Exit
End Sub

回答1:


Your Select Case is not set correctly-

Case "bb" should be Case "bb@gmail.com" & Case "aa" should be Case "aa@gmail.com"

also Set SubFolder = Inbox.Folders("BB") BB should be your subfolder name

__

Option Explicit
Public Sub Move_Items()
   '// Declare your Variables
    Dim Inbox As Outlook.MAPIFolder
    Dim SubFolder As Outlook.MAPIFolder
    Dim Folder As Outlook.MAPIFolder '<- has been added
    Dim olNs As Outlook.NameSpace
    Dim Item As Outlook.MailItem
    Dim Items As Outlook.Items
    Dim lngCount As Long

'    On Error GoTo MsgErr
   '// Set Inbox Reference
    Set olNs = Application.GetNamespace("MAPI")
    Set Inbox = olNs.GetDefaultFolder(olFolderInbox)
    Set Folder = Application.Session.PickFolder
    Set Items = Inbox.Items

   '// Loop through the Items in the folder backwards
    For lngCount = Inbox.Items.Count To 1 Step -1
        Set Item = Inbox.Items.Item(lngCount)

        Debug.Print Item.Subject

        If Item.Class = olMail Then
            Select Case Item.SenderEmailAddress

'               // Email_One
                Case "bb@gmail.com"
'                   // Set SubFolder of Inbox
                    Set SubFolder = Inbox.Folders("Temp")
                    Set Item = Items.Find("[SenderEmailAddress] = 'bb@gmail.com'")
                    If TypeName(Item) <> "Nothing" Then
'                       // Mark As Read
                        Item.UnRead = False
'                       // Move Mail Item to sub Folder
                        Item.Move SubFolder
                    End If

'               // Email_Two
                Case "aa@gmail.com"
'                   // Set SubFolder of Inbox
                    Set SubFolder = Inbox.Folders("Temp")
                    Set Item = Items.Find("[SenderEmailAddress] = 'aa@gmail.com'")
                    If TypeName(Item) <> "Nothing" Then
'                       // Mark As Read
                        Item.UnRead = False
'                       // Move Mail Item to sub Folder
                        Item.Move SubFolder
                    End If

            End Select
        End If
    Next lngCount

MsgErr_Exit:
    Set Inbox = Nothing
    Set SubFolder = Nothing
    Set olNs = Nothing
    Set Item = Nothing
    Set Items = Nothing

    Exit Sub

'// Error information
MsgErr:
    MsgBox "An unexpected Error has occurred." _
         & vbCrLf & "Error Number: " & Err.Number _
         & vbCrLf & "Error Description: " & Err.Description _
         , vbCritical, "Error!"
    Resume MsgErr_Exit
End Sub


来源:https://stackoverflow.com/questions/37200110/move-e-mails-by-senderemailaddress-outlook-macro

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!