/ / Імпорт останніх листів із Outlook Into в Excel (VBA) - excel, vba, email, outlook, pst

Імпорт останніх повідомлень електронної пошти з Outlook в Excel (VBA) - Excel, VBA, електронна пошта, Outlook, PST

Я витратив багато часу на це, і ще не знаходжу повної відповіді. Що я хочу зробити, це захопити 100 найсучасніший електронні листи від Outlook та вставити їх у робочу книгу Excel. Я створив код (який запозичує з декількох різних веб-сайтів), який це досяг, але в ньому відсутнє "найсучасніший"частина.

Коли я виконую цей код у Excel, це 101 рядокроздруковується з інформацією, яку я вказав, що добре. Але це не з останніми електронними листами. Якщо ви бачите на зображенні нижче, час зараз 19:18, але електронні листи, які імпортуються в Excel, є лише з 14:17 сьогодні та раніше. (Я заблокував інші стовпці з міркувань конфіденційності)

Скріншот

Спочатку електронні листи вставляли лише зякихось випадкових днів у травні 2014 року. Я видалив свій обліковий запис в Outlook 2013 і повторно додав його, і саме тоді, коли код Excel почав захоплювати його сьогодні з 14:17, а не кілька місяців тому. це має щось спільне з кодом лише зчитуванням файлу PST, який створюється під час зв’язування облікового запису з Outlook, але я не зовсім впевнений.

Я широко розглядав цю проблему, і ніхтоздається, відчуває те саме питання. Мені просто хочеться знати, чи є спосіб змінити код, щоб отримати лише найпопулярніші електронні листи. Я не хочу захоплювати заархівовані електронні листи, які є в оригінальному файлі PST. Чи є спосіб відновити файл PST кожного разу, коли код виконується? Чи існує спосіб, який код може просто читати з активного вікна Outlook, а не будь-які поради будуть дуже вдячні.

Ось мій код:

Sub Test()

"Dim objOL As Object
"Set objOL = CreateObject("Outlook.Application")

Dim objOL As Outlook.Application
Set objOL = New Outlook.Application

Dim OLF As Outlook.MAPIFolder
Set OLF = GetObject("", "Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)

Dim CurrUser As String
Dim EmailItem
Dim i As Integer
Dim EmailCount As Integer

Dim WS As Worksheet " assigns variable WS to being a new worksheet
Application.ScreenUpdating = False
Set WS = Sheets.Add(After:=Sheets(Worksheets.Count)) " creates a new worksheet
ActiveSheet.Name = "List of Received Emails" " renames the worksheet

" adds the headers
Cells(1, 1).Formula = "From:"
Cells(1, 2).Formula = "Cc:"
Cells(1, 3).Formula = "Subject:"
Cells(1, 4).Formula = "Date"
Cells(1, 5).Formula = "Received"

With Range("A1:E1").Font " range of cells and the font style
.Bold = True
.Size = 14
End With

EmailItemCount = OLF.Items.Count

i = 0
EmailCount = 0

" reads e-mail information
While i < 100
i = i + 1
With OLF.Items(i)
EmailCount = EmailCount + 1
Cells(EmailCount + 1, 1).Formula = .SenderName
Cells(EmailCount + 1, 2).Formula = .CC
Cells(EmailCount + 1, 3).Formula = .Subject
Cells(EmailCount + 1, 4).Formula = Format(.ReceivedTime, "mm/dd/yyyy")
Cells(EmailCount + 1, 5).Formula = Format(.ReceivedTime, "hh:mm AMPM")
End With
Wend
Set OLF = Nothing
Columns("A:D").AutoFit
Range("A2").Select

Application.StatusBar = False

End Sub

P.S. У моїй робочій книзі Excel увімкнено посилання на бібліотеку об’єктів Microsoft Outlook 15.0.

Відповіді:

1 для відповіді № 1

Ти можеш Restrict і Sort в Items що ви отримуєте ... Дивіться посилання MSDN тут: Items.Sort довідка

Наприклад, перед циклом:

 OLF.Items.Sort "[SentOn]", True

(Правда - для спадання ...)