Переместить электронную почту из одной папки Outlook в другую - PullRequest
0 голосов
/ 11 июля 2019

Я использую этот код для копирования содержимого из папки Outlook TODO в папку Outlook Test. Обе папки существуют.

Я получил

«Ошибка времени выполнения» -2147221233 (8004010f) '

для Set myItem = myInbox.Folders("TODO")

Я пытался

Dim myItem As Folder

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 myItem = myInbox.Folders("TODO") 
    While TypeName(myItem) <> "Nothing" 
        myItem.Move myDestFolder 
        Set myItem = myItems.FindNext 
    Wend 
End Sub

1 Ответ

1 голос
/ 11 июля 2019

Это переместит все файлы с 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 тоже дают странные результаты, и их следует избегать при удалении элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...