Сценарий Outlook VBA для сохранения всех вложений в подпапку «Входящие»

Я пытаюсь изменить этот код VBA, чтобы сохранить все вложения из электронных писем в папке «Входящие» subfolder. Элементы заполняются всеми сообщениями в этой папке, но остальная часть кода не работает.

Я пытаюсь распечатать объект элемента для отладки, и это тоже не работает.

Исходный код: https://community.spiceworks.com/scripts/show/361-auto-save-attachments-to-folder

Обновление 1: я понял, что теперь только Application_Startup() можно отлаживать с помощью кнопки «Выполнить». Отправив тестовое электронное письмо, я смог пройти через программу и убедиться, что все работает, как и ожидалось.

Option Explicit
Public WithEvents Items As Outlook.Items
Public Sub Application_Startup()
    Dim olNs As Outlook.NameSpace
    Set olNs = Application.GetNamespace("MAPI")

    Dim Inbox  As Outlook.MAPIFolder
    Set Inbox = olNs.GetDefaultFolder(olFolderInbox)
    
    Dim Sub_folder  As Outlook.MAPIFolder
    Set Sub_folder = Inbox.Folders("DocuSign")
    
    Set Items = Sub_folder.Items
End Sub


Public Sub Items_ItemAdd(ByVal Item As Object)
    Stop
    If TypeOf Item Is Outlook.MailItem Then
        Debug.Print Item.Subject
    End If

On Error GoTo ErrorHandler
    'Only act if it's a MailItem
    Dim Msg As Outlook.MailItem
    If TypeName(Item) = "MailItem" Then
        Set Msg = Item
    'Change variables to match need. Comment or delete any part unnecessary.
        If (Msg.SenderEmailAddress = "[email protected]") And _
        (InStr(Msg.Subject, "Completed:")) And _
        (Msg.Attachments.Count >= 1) Then
        
    'Set folder to save in.
    Dim olDestFldr As Outlook.MAPIFolder
    Dim myAttachments As Outlook.Attachments
    Dim Att As String
        
    'location to save in.  Can be root drive or mapped network drive.
    Const attPath As String = "C:\Users\Austin\Desktop\temp\"
       
    ' save attachment
   Set myAttachments = Item.Attachments
    Att = myAttachments.Item(1).DisplayName
    ' remove .pdf
    Att = Left(Att, InStrRev(Att, ".") - 1)
    myAttachments.Item(1).SaveAsFile attPath & Att & "_signed.pdf"
        
    ' mark as read
   Msg.UnRead = False
End If
End If
    

ProgramExit:
  Exit Sub
  
ErrorHandler:
  MsgBox Err.Number & " - " & Err.Description
  Resume ProgramExit
End Sub

person Austin    schedule 07.08.2020    source источник
comment
Что вы имеете в виду под не работает? Что вы пытались отладить проблему?   -  person Nico Haase    schedule 07.08.2020
comment
Вы уже публиковали этот вопрос раньше (stackoverflow.com/questions/63292552/), и было несколько ответов. Вместо того, чтобы удалять его (и, таким образом, уничтожать все комментарии), вы можете отредактировать исходный пост.   -  person Dmitry Streblechenko    schedule 07.08.2020
comment
@NicoHaase Да, как я уже сказал, мне удалось напечатать объект элементов в функции Application_Startup(), но я не могу напечатать элементы в операторе Else, включенном в код.   -  person Austin    schedule 07.08.2020
comment
@DmitryStreblechenko Прошу прощения за удаление, я просто случайно разместил не те теги. Я вижу, вы предложили удалить исключение ошибки. Я пробовал и просто использовал простой оператор печати Debug.Print (тест), но он ничего не печатает. Однако этот оператор печати работает в функции Application_Startup().   -  person Austin    schedule 07.08.2020


Ответы (1)


Попробуйте настроить Application_Startup следующим образом

Пример

Option Explicit
Private WithEvents Items As Outlook.Items
Private Sub Application_Startup()
    Dim olNs As Outlook.NameSpace
    Set olNs = Application.GetNamespace("MAPI")

    Dim Inbox  As Outlook.MAPIFolder
    Set Inbox = olNs.GetDefaultFolder(olFolderInbox)
    
    Dim Sub_folder  As Outlook.MAPIFolder
    Set Sub_folder = Inbox.Folders("DocuSign")
    
    Set Items = Sub_folder.Items
End Sub


Private Sub Items_ItemAdd(ByVal Item As Object)
    If TypeOf Item Is Outlook.MailItem Then
        Debug.Print Item.Subject
    End If
End Sub
person 0m3r    schedule 07.08.2020
comment
Мне нужно изменить функции на общедоступные, иначе я не смогу запустить их вручную. Это не производит никакого вывода, хотя - person Austin; 07.08.2020
comment
Тогда как мне его отлаживать/тестировать? Я могу распечатать вывод только в окне Immediate с помощью редактора vba, который я открываю с помощью CTRL + G. - person Austin; 07.08.2020
comment
@Austin, убедитесь, что код находится под ThisOutlookSession, нажмите application_Startup(), затем нажмите «Выполнить», после чего отправьте электронное письмо себе или переместите электронное письмо в подпапку, глядя в ближайшее окно. - person 0m3r; 08.08.2020
comment
Когда функции установлены как общедоступные, их нельзя выбрать с помощью кнопки запуска. Я проверил независимо от тестового электронного письма, и это не работает. Также возможно ли, чтобы этот скрипт также работал со всей существующей почтой в папке? - person Austin; 08.08.2020
comment
@ 0m3r, как я уже говорил, сценарий не работает, даже когда я отправляю тестовое электронное письмо с темой «Завершено:», измененный сценарий для отправителя и электронное письмо с вложением. - person Austin; 10.08.2020
comment
@Austin, давай забудем о сценарии, ты можешь сказать мне, что ты пытаешься сделать? пытаетесь загрузить вложение с определенного адреса электронной почты? - person 0m3r; 10.08.2020
comment
@0m3r Загрузите вложение с определенного адреса электронной почты с темой, включающей строку Completed: - person Austin; 11.08.2020
comment
@ 0m3r Я могу отлаживать и распечатывать переменные в функции Application_Startup(), если я изменяю все функции на общедоступные и запускаю вручную, но не в каких-либо других частях кода. - person Austin; 11.08.2020
comment
@ 0m3r Спасибо за помощь, я смог заставить это работать - person Austin; 11.08.2020
comment
@ 0m3r Кажется, скрипт не запускается автоматически при запуске Outlook. Мне нужно запустить его один раз вручную в окне разработки VBA. См. здесь: stackoverflow.com/questions/63404746/ - person Austin; 21.08.2020
comment
@Остин, твои настройки безопасности макросов в порядке? - person 0m3r; 23.08.2020
comment
@ 0m3r Да, он настроен на включение всех макросов. - person Austin; 01.09.2020