Как сохранить вложения Excel в новой почте, основываясь как на полученном времени, так и на теме? - PullRequest
0 голосов
/ 07 июля 2019

Я довольно новичок в кодировании.Я хотел бы знать, как сохранить определенные вложения Excel в папке входящих сообщений Outlook («Утренние электронные письма»), используя ключевые слова строки темы и полученное время.

Каждый день я получаю пять новых электронных писем, а вложения Excel сохраняются вта же папка диска.

Полученное время может быть либо прошлой ночью, либо ранним утром.

Имена всех пяти файлов и время получения различаются.

Входящиене пустой.Я не хочу сохранять то, что я сохранил вчера или 2 недели назад.

Sub SaveAttachments()

    Dim ol As Outlook.Application
    Dim ns As Outlook.Namespace
    Dim fol As Outlook.Folder
    Dim i As Object
    Dim mi As Outlook.MailItem
    Dim at As Outlook.Attachment

    Set ol = New Outlook.Application
    Set ns = ol.GetNamespace("MAPI")
    Set fol = ns.Folders(1).Folders("Morning Emails")

    For Each i In fol.Items

        If i.Class = olMail Then

            Set mi = i

            If mi.Attachments.Count > 0 Then
                For Each at In mi.Attachments
                    at.SaveAsFile "C:\Users\nader\OneDrive\Documents\" & _
                      at.Filename & Format(mi.ReceivedTime, " MM-DD-YYYY")
                Next at   
            End If

        End If

    Next i

End Sub

"Попытка не удалась; объект не найден" для строки: Set fol = ns.Folders(1).Folders("Morning Emails"), даже если я создал эту подпрограммупапка под моим почтовым ящиком Outlook.

1 Ответ

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

Set ol = New Outlook.Application

Нет необходимости создавать новый экземпляр приложения Outlook в коде.Используйте свойство Application для получения экземпляра хост-приложения в макросах Outlook VBA.

Я бы порекомендовал обработать событие NewMailEx класса Application.Это событие запускается один раз для каждого полученного элемента, который обрабатывается Microsoft Outlook.Элемент может быть одним из нескольких различных типов элементов, например, MailItem, MeetingItem или SharingItem.Строка EntryIDsCollection содержит идентификатор записи, соответствующий этому элементу.

Событие NewMailEx возникает, когда новое сообщение поступает в папку «Входящие» и до обработки правил клиента.Вы можете использовать идентификатор записи, возвращенный в массиве EntryIDCollection, для вызова метода NameSpace.GetItemFromID и обработки элемента.

Private Sub outApp_NewMailEx(ByVal EntryIDCollection As String)    
      Dim itm as Object
      Set itm = NS.GetItemFromID(EntryIDCollection)
      Debug.Print "mail received"
      If itm.Class = olMail Then
        Dim it as Outlook.MailItem
        Set it = itm       
        if it.Subject = "your subject" then 
          If it.Attachments.Count > 0 Then
            For Each at In mi.Attachments
                at.SaveAsFile "C:\Users\nader\OneDrive\Documents\" & _
                    at.Filename & Format(mi.ReceivedTime, " MM-DD-YYYY")
            Next at
          End If
        End If
      End If
End Sub
...