我想将除最近的电子邮件以外的所有电子邮件从一个文件夹移动到另一个文件夹。
下面的代码移动除一封电子邮件外的所有电子邮件,但不是最后一封收到的电子邮件。
我必须参考.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
尝试先排序然后删除。
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结束
[首先,请勿使用多个点符号,尤其是在循环中-每个“。”。将返回一个全新的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);
}