我如何将所有电子邮件移至最近的文件夹以外的其他文件夹中

问题描述 投票:2回答:2

我想将除最近的电子邮件以外的所有电子邮件从一个文件夹移动到另一个文件夹。

下面的代码移动除一封电子邮件外的所有电子邮件,但不是最后一封收到的电子邮件。

我必须参考.ReceivedTime给予时间参考吗?

For i = objstartFolder.Items.Count - 1 To 0 Step -1

    With objstartFolder.Items(2)

        On Error Resume Next

        .Move objMoveFolder

   End With

我尝试过

 For i = objstartFolder.Items.Count To 1 Step -1
 For i = 1 To objstartFolder.Items.Count Step 1
 For i = 0 To objstartFolder.Items.Count -1 Step 1
vba outlook outlook-vba
2个回答
0
投票

尝试先排序然后删除。

objstartFolder.Items.Sort“已接收”,False

有关示例,请参见http://msdn.microsoft.com/en-us/library/aa163981(v=office.10).aspx

编辑2015 02 16

我最初直接将文件夹中的项目排序。如果有效,则将是不可靠的,因为True / False是相同的

Sub SortByReceived_Move()

    Dim myNameSpace As Namespace
    Dim myFolder As folder
    Dim myMoveToFolder As folder
    Dim myItems As Items
    Dim j As Long

    Set myNameSpace = Application.GetNamespace("MAPI")
    Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox).Folders("@Play")
    Set myMoveToFolder = myFolder.Folders("@Test")

    Set myItems = myFolder.Items

    myItems.sort "Received", True
    Debug.Print myItems(1).Subject & " - " & myItems(1).ReceivedTime

    For j = myItems.count To 2 Step -1
        Debug.Print myItems(j).Subject & " - " & myItems(j).ReceivedTime
        myItems(j).Move myMoveToFolder
    Next j

ExitRoutine:
    Set myNameSpace = Nothing
    Set myFolder = Nothing
    Set myMoveToFolder = Nothing
    Set myItems = Nothing

End Sub

编辑2015 02 16结束


0
投票

[首先,请勿使用多个点符号,尤其是在循环中-每个“。”。将返回一个全新的COM对象。在对项目集合进行排序和循环之前,对其进行缓存。您可能还想先限制(Items.Restrict)集合。

Items = objstartFolder.Items;
Items.Restrict("[ReceivedTime] >= '2013-01-01' ");
Items.Sort("ReceivedTime");
for (int i=Items.Count; i >= 1; i--)<
{
    Item = Items.Item(i);
    ...
    Item.Move(SomeOtherfolder); 
}
© www.soinside.com 2019 - 2024. All rights reserved.