#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.