Сообщения Outlook, прочитанные из папки Windows, пусты для определенных значений

#excel #vba #outlook

#excel #vba #outlook

Вопрос:

Учитывая каталог, содержащий несколько тысяч файлов Outlook MSG, я хочу использовать Excel для чтения определенных фрагментов метаданных сообщения и отображения их на листе. Однако VBA возвращает некоторые поля как пустые, такие как Отправитель.

Я ожидаю одно вложение на электронное письмо. Я пытаюсь:

 Sub SaveOlAttachments()

Dim objOL As Outlook.Application
Set objOL = New Outlook.Application
Dim fpath As String
Dim outPath As String
Dim writeRow As Long

fpath="somepath"
outPath="somepath"
writeRow = 2

strFile = Dir(fpath amp; "" amp; "*.msg")
Do While Len(strFile) > 0
    Set Msg = objOL.Session.OpenSharedItem(fpath amp; "" amp; strFile)
    If Msg.Attachments.Count > 0 Then
         For Each att In Msg.Attachments
             att.SaveAsFile outPath amp; "" amp; att.Filename
             Cells(writeRow, 1).Value = Msg.Subject
             Cells(writeRow, 2).Value = att.Filename
             Cells(writeRow, 3).Value = Msg.SentOn
         Next
    End If
    writeRow = writeRow   1
    strFile = Dir
Loop

End Sub

  

Однако, просматривая сообщение Msg в моем окне Locals, я получаю пустые значения для SenderEmailAddress, BCC, Body, Recipients.

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

Комментарии:

1. Вы пытались просмотреть проблемные файлы MSG с помощью OutlookSpy ( dimastr.com/outspy — нажмите кнопку OpenIMshOnOStg)?

2. writeRow увеличивается только после каждого сообщения, а не после каждого вложения.

Ответ №1:

Оказывается, что копирование файлов с моего сетевого диска в папку «Входящие» Outlook вернуло значения туда, где я снова мог их видеть в Outlook.

Вместо создания рабочей книги в Excel я использовал приведенный ниже метод в VBE Outlook, чтобы сопоставить необходимые мне данные из каждого электронного письма в формате csv, который я затем мог сохранить.

 Sub read_drta()

Dim objNS As Outlook.NameSpace
Dim objFolder As Outlook.MAPIFolder
Set objNS = GetNamespace("MAPI")
Set objFolder = objNS.folders("my_email@address.com")
Set objFolder = objFolder.folders("Inbox")
Set objFolder = objFolder.folders("imports")
fpath = "C:UsersEmail_Tasker"

my_csv = fpath amp; "data.csv"

Open my_csv For Output As #1

For Each Item In objFolder.Items

    myLine = Item.Subject amp; "," amp; Item.SentOn amp; "," amp; Item.SenderEmailAddress amp; "," amp; Item.Attachments(1).FileName
    Print #1, myLine
Next Item

Close #1
End Sub
  

Объект «Item» содержал все в Outlook VBA, но, как ни странно, он по-прежнему сохранял те же поля пустыми в Excel.