Ссылка на общую папку потеряна после первого запуска

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

У меня два почтовых ящика и общий - второй.

Исходящий TTA = имя второго общего почтового ящика.

réception = имя папки «Входящие» в исходящей TTA.

MyFolderEmails = имя подпапки в папке приема.

Код работает только один раз!

Второй раз показывает

Ошибка выполнения «-2147221233 (8004010f)»: не удалось выполнить операцию. Не удалось найти объект.

Ошибка появляется на Set sharedDestinationFolder = sharedInbox.Folders("MyFolderEmails")

Public Sub test2()
    MoveSelectionToFolder
End Sub


Private Sub MoveSelectionToFolder()
    Dim NS As nameSpace

    Dim sharedInbox As folder
    Dim sharedDestinationFolder As folder

    Dim sharedItems As Selection

    Dim i As Long

    Set NS = Application.GetNamespace("MAPI")
    Set sharedInbox = NS.Folders("Outbound TTA").Folders("réception")
    Set sharedDestinationFolder = sharedInbox.Folders("MyFolderEmails")
        
    Set sharedItems = ActiveExplorer.Selection

    For i = sharedItems.Count To 1 Step -1
        sharedItems(i).Move sharedDestinationFolder
    Next i

    Set NS = Nothing
    Set sharedItems = Nothing
    Set sharedInbox = Nothing
    Set sharedDestinationFolder = Nothing

End Sub

Также, даже похожие коды имеют одинаковую судьбу, срабатывают только один раз; после этого показывают ошибку.


person MeMa    schedule 09.07.2020    source источник
comment
Это очень озадачивает. Ваш код, кажется, не имеет никаких проблем. Попробуйте добавить это условие в цикл If TypeName(sharedItems(i)) = "MailItem" Then перед перемещением элемента. Кроме того, вы говорите первый и второй раз, когда он снова становится первым? Я имею в виду, когда он снова заработает? Это когда вы выходите из Outlook и запускаете его снова? Я просто думаю, что может быть что-то, что вы можете сбросить в начале вашего кода.   -  person Super Symmetry    schedule 10.07.2020
comment
Да, он снова работает после закрытия и повторного запуска Outlook. Да, сброс - это решение. А сбросить что?. Я занимаюсь этой проблемой в течение недели и не могу пройти мимо этого момента. Один раз работает, а ошибка после. Дело в том, что он не видит ни одной подпапки в папке приема (я имею в виду код). Такая же проблема на другом компе моего коллеги. Так что прогноз работает отлично...   -  person MeMa    schedule 10.07.2020
comment
Попробуйте обновить свой почтовый ящик, добавив эту строку NS.Logon "", "", False, True после Set NS = Application.GetNamespace("MAPI"). Получил от программистов доступа. co.uk/forums/threads/   -  person Super Symmetry    schedule 10.07.2020
comment
Я сделал именно так, и поведение такое же: работает один раз и больше не работает (выдает ту же ошибку, что и выше).   -  person MeMa    schedule 10.07.2020


Ответы (1)


Хорошо, попробуйте сохранить ссылку на папку как статическую переменную, подобную этой. (перезапустите Outlook, а затем используйте код)

' Set it as a static variable
Global sharedDestinationFolder As Folder

Public Sub test2()
    MoveSelectionToFolder
End Sub


Private Sub MoveSelectionToFolder()
    Dim NS As Namespace

    Dim sharedInbox As Folder
    'Dim sharedDestinationFolder As Folder

    Dim sharedItems As Selection

    Dim i As Long
       
    If sharedDestinationFolder Is Nothing Then
        Set NS = Application.GetNamespace("MAPI")
        Set sharedInbox = NS.Folders("Outbound TTA").Folders("réception")
        Set sharedDestinationFolder = sharedInbox.Folders("MyFolderEmails")
        
        MsgBox "Setting destination folder"
    End If
        
    Set sharedItems = ActiveExplorer.Selection

    For i = sharedItems.Count To 1 Step -1
        If TypeName(sharedItems(i)) = "MailItem" Then
            sharedItems(i).Move sharedDestinationFolder
        End If
    Next i

    Set NS = Nothing
    Set sharedItems = Nothing
    Set sharedInbox = Nothing
    'Set sharedDestinationFolder = Nothing

End Sub

Теоретически, при первом запуске кода вы увидите окно сообщения. Когда вы снова запустите его, это будет не Nothing, и поэтому он должен иметь действительную ссылку на правильную папку (опять же теоретически)

person Super Symmetry    schedule 10.07.2020
comment
Первый запуск: все ок. В окне сообщения говорится: «Установка папки назначения», и письма перемещаются в соответствии с планом. Второй раз: появляется ошибка. Примечание: это похоже на то, что sharedDestinationFolder ничего не значит во второй раз... - person MeMa; 10.07.2020
comment
Извините, моя вина. Попробуйте еще раз. Я забыл удалить последнюю строку. Помните, что вы устанавливаете sharedDestinationFolder на Nothing вручную. - person Super Symmetry; 10.07.2020
comment
МОГУ СКАЗАТЬ, ЧТО ЛЮБЛЮ ТЕБЯ? ОНО РАБОТАЕТ ! :) - person MeMa; 10.07.2020
comment
Можно, но теперь мне приходится прятать комьютер от жены :) Рад, что сработало - person Super Symmetry; 10.07.2020
comment
Пожалуйста, не забудьте принять ответ, и если у вас возникнут дополнительные проблемы, связанные с этой проблемой, просто обновите этот пост. Спасибо - person Super Symmetry; 10.07.2020
comment
:)) это необычно. Это решение для многих, у которых был тот же самый вопрос. Я опытный программист, но я просто не мог найти решение для этого. Это также первый раз, когда мне помогает другой программист в дикой природе :) Большое спасибо за ваше время. Обещаю то же самое с нуждающимся :) - person MeMa; 10.07.2020