【问题标题】:How do I move all emails to another folder except the most recent如何将所有电子邮件移动到另一个文件夹,除了最近的
【发布时间】:2012-12-04 16:27:10
【问题描述】:

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

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

我是否必须参考 .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

【问题讨论】:

  • 文件夹中还会有其他类型的项目吗? - 并非所有物品都必须是邮寄物品。 folder.Items 检索项目的顺序不遵循任何时间顺序,因此您必须遍历所有项目,找到最新的项目,然后移动所有其他项目。
  • @TimWilliams - 谢谢,我在想它不能按时间顺序运行。关于如何编写您正在谈论的循环的任何想法?

标签: vba outlook


【解决方案1】:

尝试先排序然后删除。

objstartFolder.Items.Sort "已收到",假

例子见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 结束

【讨论】:

  • 这将不起作用,因为您使用的是多点表示法,并且 Items 集合已排序并立即丢弃。下次调用 MAPIFolder.Items 时,您将得到一个全新的 COM 对象,它不知道以前的对象。
【解决方案2】:

首先,不要使用多个点符号,尤其是在循环中 - 每个“.”将返回一个全新的 COM 对象。在排序和循环之前缓存 Items 集合。您可能还想先限制 (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); 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2011-04-24
    • 1970-01-01
    • 2022-08-10
    相关资源
    最近更新 更多