Добавление имени вложения электронной почты в мой отчет Outlook - PullRequest
0 голосов
/ 05 октября 2018

С приведенным ниже кодом я получаю сообщение об ошибке при попытке добавить имя файла вложения в отчет.Возможно, это синтаксис?

Ошибка возникает в Report = Report & currentItem.Attachments.FileName строке

Ошибка: «объект не поддерживает это свойство или метод.

Есть идеи?

Я запускаю этот код в Outlook,

Private Sub GetAllEmailsInFolder(CurrentFolder As Outlook.Folder, Report As String)
    Dim currentItem
    Dim attachment As attachment
    Dim currentMail As MailItem

    Report = Report & "Folder Name: " & CurrentFolder.Name & " (Store: " & CurrentFolder.Store.DisplayName & ")" & vbCrLf

    For Each currentItem In CurrentFolder.Items
        Report = Report & currentItem.Subject
        Report = Report & vbCrLf
        Report = Report & "----------------------------------------------------------------------------------------"
        Report = Report & vbCrLf
        Report = Report & currentItem.Attachments.FileName

    Next

End Sub

Кроме того, я сначала запускаю подпрограмму, которая получает список электронных писем:

Public Sub GetListOfEmails()
    'On Error GoTo On_Error

    Dim Session As Outlook.NameSpace
    Dim Report As String
    Dim Folder As Outlook.Folder

    Set Session = Application.Session

    Set Folder = Application.ActiveExplorer.CurrentFolder

    Call GetAllEmailsInFolder(Folder, Report)

    Dim retValue As Boolean
    retValue = CreateReportAsEmail("List of Emails", Report)

Exiting:
        Set Session = Nothing
        Exit Sub
On_Error:
    MsgBox "error=" & Err.Number & " " & Err.Description
    Resume Exiting

End Sub

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

Public Function CreateReportAsEmail(Title As String, Report As String)
    'On Error GoTo On_Error

    Dim Session As Outlook.NameSpace
    Dim mail As MailItem
    Dim MyAddress As AddressEntry
    Dim Inbox As Outlook.Folder

    CreateReportAsEmail = True

    Set Session = Application.Session
    Set Inbox = Session.GetDefaultFolder(olFolderInbox)
    Set mail = Inbox.Items.Add("IPM.Mail")

    Set MyAddress = Session.CurrentUser.AddressEntry
    mail.Recipients.Add (MyAddress.Address)
    mail.Recipients.ResolveAll

    mail.Subject = Title
    mail.Body = Report

    mail.Save
    mail.Display


Exiting:
        Set Session = Nothing
        Exit Function
On_Error:
    CreateReportAsEmail = False
    MsgBox "error=" & Err.Number & " " & Err.Description
    Resume Exiting

End Function

Ответы [ 2 ]

0 голосов
/ 05 октября 2018
  • Коллекция Attachments не имеет свойства Filename, но каждая отдельная Attachment имеет.Добавьте дополнительный цикл в коллекцию Attachments.
  • GetAllEmailsInFolder должен быть Function, возвращая String.A Sub что-то делает;Function возвращает что-то.
  • GetAllEmailsInFolder предполагает, что все элементы в CurrentFolder равны MailItem с, что может * не иметь место.
  • Используйте имя переменной, отличное от attachment для каждого Attachment.То же самое касается Folder, Session ...

Не проверено, но что-то вроде этого:

Private Function GetAllEmailsInFolder(CurrentFolder As Outlook.Folder) As String
    Dim currentItem As Object
    Dim myAttachment As Attachment
    Dim Report as String

    Report = Report & "Folder Name: " & CurrentFolder.Name & " (Store: " & CurrentFolder.Store.DisplayName & ")" & vbCrLf

    For Each currentItem In CurrentFolder.Items
        If TypeOf currentItem Is Outlook.MailItem Then
            Report = Report & currentItem.Subject
            Report = Report & vbCrLf
            Report = Report & "----------------------------------------------------------------------------------------"
            Report = Report & vbCrLf
            For Each myAttachment in currentItem.Attachments
                Report = Report & myAttachment.Filename ' and add formatting inbetween as needed
            Next myAttachment
        End If
    Next currentItem

    GetAllEmailsInFolder = Report
End Sub
0 голосов
/ 05 октября 2018

Вот краткий пример. Возможно, вам придется немного откорректировать способ отображения в электронной почте.

    For Each currentItem In CurrentFolder.Items
        Report = Report & currentItem.Subject
        Report = Report & vbCrLf
        Report = Report & "--------------------------------------------------------"
        Report = Report & vbCrLf
'        Report = Report & currentItem.Attachments.FileName

        For Each attachment In currentItem.Attachments
            Debug.Print attachment.FileName
            Report = Report & attachment.FileName
        Next

    Next

Объект MSDN Attachment (Outlook)

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