Это переместит все файлы с TODO
на Test
Sub MoveItems()
Dim myNameSpace As Outlook.NameSpace
Dim myInbox As Outlook.Folder
Dim myDestFolder As Outlook.Folder
Dim myItems As Outlook.Items
Dim myItem As Object
Set myNameSpace = Application.GetNamespace("MAPI")
Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
Set myItems = myInbox.Items
Set myDestFolder = myInbox.Folders("test")
Set myItems = myInbox.Folders("TODO").Items
'Debug.Print myItems.Count
For i = myItems.Count To 1 Step -1 'Iterates from the end backwards
myItems.Item(i).Move myDestFolder
Next
End Sub
Вы должны были зациклить все элементы в папке, этот код был для Нахождения определенной почты.
Причина, по которой мы использовали цикл в обратном направлении (предоставлено @ComputerVersteher)
Если вы переместитесь вперед и удалите элемент (например, первый), следующие элементы займут позицию своих предшественников (например, второй-один получит первый-один), а Collection.Count
уменьшится на единицу. Цикл пересылки будет пытаться получить элементы, начиная с Collection.Count
, но элемент с последним индексом больше не доступен. При движении назад вы начинаете с последнего элемента, и если вы удалите его, следующий элемент (index-1) по-прежнему доступен, поскольку он сохраняет позицию. Кстати, циклы For Each
тоже дают странные результаты, и их следует избегать при удалении элементов.