如何从一串用户中删除Outlook电子邮件?

时间:2015-08-04 20:53:37

标签: vba outlook outlook-vba

忍受我,我是一个全新的人......

我怎样才能创建一个循环来完成这个"无限期5-10 ..."发件人列表并删除他们的邮件:

1.-如何遍历此字符串并对其中列出的每个发件人执行如下所示的操作?

以下代码适用于单个发件人。

mySenders =" Dan Wilson, Tom Hanks, Alisa Milano, Jessica Alba, Torrid, Captain America"

以下代码:

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 = myNameSpace.GetDefaultFolder(olFolderDeletedItems)
 'how to loop here?
 Set myItem = myItems.Find("[SenderName] = 'Kmart'")
 While TypeName(myItem) <> "Nothing"
 myItem.Move myDestFolder
 Set myItem = myItems.FindNext
 Wend
End Sub

2 个答案:

答案 0 :(得分:1)

有点混淆。但要从多个发件人中删除邮件,请添加第二个While .. Wend并修改它以使用myItem.Delete

示例:

Outlook 2010上测试

Option Explicit
Sub DeleteItems()
    Dim myNameSpace As Outlook.NameSpace
    Dim myInbox 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

    '// loop for each sender
    Set myItem = myItems.Find("[SenderName] = 'Dan Wilson'")
    While TypeName(myItem) <> "Nothing"
        myItem.Delete
        Set myItem = myItems.FindNext
    Wend

    '// Loop Next Sender
    Set myItem = myItems.Find("[SenderName] = 'Tom Hanks'")
    While TypeName(myItem) <> "Nothing"
        myItem.Delete
        Set myItem = myItems.FindNext
    Wend

    Set myItem = myItems.Find("[SenderName] = 'Alisa Milano'")
    While TypeName(myItem) <> "Nothing"
        myItem.Delete
        Set myItem = myItems.FindNext
    Wend

    ' More here
End Sub

答案 1 :(得分:1)

你可以根据mySenders循环一个数组。

Option Explicit

Sub MoveItems()

    Dim myNameSpace As Namespace
    Dim myInbox As folder
    Dim myDestFolder As folder
    Dim myItems As Items
    Dim myItem As Object

    Dim mySenders() As String
    Dim i As Long

    Set myNameSpace = GetNamespace("MAPI")
    Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
    Set myItems = myInbox.Items
    Set myDestFolder = myNameSpace.GetDefaultFolder(olFolderDeletedItems)

    mySenders = Split("Dan Wilson,Tom Hanks,Alisa Milano,Jessica Alba,Torrid,Captain America", ",")

    For i = LBound(mySenders) To UBound(mySenders)

        Debug.Print i & " - " & mySenders(i)

        Set myItem = myItems.Find("[SenderName] = """ & mySenders(i) & """")
        While TypeName(myItem) <> "Nothing"
            myItem.Move myDestFolder
            Set myItem = myItems.FindNext
        Wend

    Next

End Sub

您需要确切的姓名。

Sub display_SenderName()

    Dim currItem As Object

    Select Case ActiveWindow.Class

        Case olExplorer
            ' The active window is a list of messages (folder)
            ' There might be several selected messages
            ' Here only one is processed
            Set currItem = ActiveExplorer.Selection(1)
            Debug.Print currItem.Subject
            Debug.Print currItem.senderName

        Case olInspector
            Set currItem = ActiveInspector.currentItem
            Debug.Print currItem.Subject
            Debug.Print currItem.senderName

    End Select

End Sub