Ссылка на общую папку потеряна после первого запуска - PullRequest
0 голосов
/ 09 июля 2020

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

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

"Outbound TTA" = имя второго общего почтового ящика.

"réception" = имя папки "Входящие" в "Outbound TTA"

"MyFolderEmails" = имя подпапки в "réception" "папка.

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

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

Ошибка времени выполнения '-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

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

1 Ответ

0 голосов
/ 10 июля 2020

Хорошо, попробуйте сохранить ссылку на папку как статическую c переменную, как это. (перезапустите 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 и, следовательно, он должен иметь действительную ссылку на правильную папку (опять же теоретически)

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