首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >复制发现电子邮件4次

复制发现电子邮件4次
EN

Stack Overflow用户
提问于 2017-04-26 10:53:23
回答 1查看 61关注 0票数 3

我有一个宏,搜索一个主题,如果发现,复制电子邮件在另一个文件夹。我的问题是,它复制电子邮件4次,而不是仅仅一次。如果我有10封电子邮件在原来的文件夹“左边的”,那么,在搜索和复制后,我将有40封电子邮件在文件夹中“被删除”。欢迎任何帮助,谢谢。

代码语言:javascript
运行
复制
Sub Search_Inbox()

Dim myOlApp As New Outlook.Application
Dim objNamespace As Outlook.NameSpace
Dim objFolder As Outlook.MAPIFolder
Dim filteredItems As Outlook.Items
Dim itm As Object
Dim Found As Boolean
Dim strFilter As String
Dim subject_to_find As String
Dim myDestFolder As Outlook.Folder

subject_to_find = "something"

Set objNamespace = myOlApp.GetNamespace("MAPI")
Set objFolder = OpenOutlookFolder("\\Mailbox - ME\Inbox\Left Ones")

strFilter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " like '%" & subject_to_find & "%'"

Set filteredItems = objFolder.Items.Restrict(strFilter)

If filteredItems.Count = 0 Then

    Debug.Print "No emails found"
    Found = False

Else
    Found = True

    For Each itm In filteredItems
    If itm.Class = olMail Then
    Debug.Print itm.Subject
    Debug.Print itm.ReceivedTime
    End If

  Set myDestFolder = Session.Folders("Mailbox - ME").Folders("TO BE REMOVED")

    For i = filteredItems.Count To 1 Step -1
            Dim myCopiedItem As Object

            Set myCopiedItem = filteredItems(i).Copy
            myCopiedItem.Move myDestFolder

    Next i

    Next itm

End If

'If the subject isn't found:
If Not Found Then
    'NoResults.Show
Else
   Debug.Print "Found " & filteredItems.Count & " items."
End If

Set myOlApp = Nothing

End Sub
EN

回答 1

Stack Overflow用户

发布于 2017-04-26 12:21:20

对于未来的搜索者来说,这里的工作代码是在一个子文件夹中查找带有给定主题的所有电子邮件-- Inbox\Left --并将它们复制到另一个子文件夹中--Inbox\要删除--(请注意,它将省略未发送的通知):

代码语言:javascript
运行
复制
        Sub Search_Inbox_Subfolder_Left_Ones()

        Dim objFolder As Outlook.MAPIFolder
        Dim filteredItems As Outlook.Items
        Dim itm As Object
        Dim Found As Boolean
        Dim strFilter As String
        Dim subject_to_find As String
        Dim myDestFolder As Outlook.Folder
        Dim myCopiedItem As Object

        subject_to_find = "something to find"

        Set objFolder = OpenOutlookFolder("\\Mailbox - ME\Inbox\Left Ones")

        strFilter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " like '%" & subject_to_find & "%'"

        Set filteredItems = objFolder.Items.Restrict(strFilter)

        If filteredItems.Count = 0 Then

            Debug.Print "No emails found"
            Found = False

        Else
            Found = True

     Set myDestFolder = Session.Folders("Mailbox - ME").Folders("TO BE REMOVED")

            For i = filteredItems.Count To 1 Step -1

             If filteredItems(i).Class = olMail Then

                    Set myCopiedItem = filteredItems(i).Copy
                    myCopiedItem.Move myDestFolder

             End If

            Next i

        End If

        'If the subject isn't found:
        If Not Found Then
            'NoResults.Show
        Else
           Debug.Print "Found " & filteredItems.Count & " items."
        End If

        Set myOlApp = Nothing

        End Sub

Private Function OpenOutlookFolder(strFolderPath As String) As Outlook.MAPIFolder
    Dim arrFolders As Variant, _
        varFolder As Variant, _
        bolBeyondRoot As Boolean
    On Error Resume Next
    If strFolderPath = "" Then
        Set OpenOutlookFolder = Nothing
    Else
        Do While Left(strFolderPath, 1) = "\"
            strFolderPath = Right(strFolderPath, Len(strFolderPath) - 1)
        Loop
        arrFolders = Split(strFolderPath, "\")
        For Each varFolder In arrFolders
            Select Case bolBeyondRoot
                Case False
                    Set OpenOutlookFolder = Outlook.Session.Folders(varFolder)
                    bolBeyondRoot = True
                Case True
                    Set OpenOutlookFolder = OpenOutlookFolder.Folders(varFolder)
            End Select
            If Err.Number <> 0 Then
                Set OpenOutlookFolder = Nothing
                Exit For
            End If
        Next
    End If
    On Error GoTo 0
End Function
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43632133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档