2

最新のメールを除くすべてのメールをあるフォルダーから別のフォルダーに移動したいと考えています。

以下のコードは、1 つを除くすべての電子メールを移動しますが、最後に受信した電子メールではありません。

時間参照を与えるために .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
4

2 に答える 2

0

まず、特にループでは、複数のドット表記を使用しないでください。各「。」真新しい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); 
}
于 2013-02-10T16:47:10.577 に答える
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 終了

于 2013-02-09T22:32:44.680 に答える