Импортируйте самые последние электронные письма из Outlook в Excel (VBA)
Я потратил много времени на изучение этого вопроса, и мне еще предстоит найти полный ответ. То, что я хочу сделать, это получить 100 последних писем из Outlook и вставить их в книгу Excel. Я создал код (заимствованный из нескольких разных веб-сайтов), который выполнил это, но в нем отсутствует "самая последняя" часть.
Когда я выполняю этот код в Excel, распечатывается 101 строка с информацией, которую я указал, и это хорошо. Но это не с самыми последними электронными письмами. Если вы видите на изображении ниже, сейчас время 7: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
PS В моей книге Excel включена ссылка на библиотеку объектов Microsoft Outlook 15.0.
1 ответ
Вы можете Restrict
а также Sort
Items
что вы получаете... См. ссылку MSDN здесь: Items.Sort reference
Например, перед вашим циклом:
OLF.Items.Sort "[SentOn]", True
(Истина для нисходящего...)