从Outlook导入最近的电子邮件到Excel(VBA)

我花了很多时间来研究这个,我还没有find完整的答案。 我期望做的是从Outlook中抓取100个最近的电子邮件,并将它们粘贴到Excel工作簿中。 我已经build立了一个代码(从几个不同的网站借鉴),已经完成了这个代码,但是它缺less了“ 最新的 ”部分。

当我在Excel中执行这个代码时,用指定的信息打印出101行,这是很好的。 但这不是最近的电子邮件。 如果您在下面的图片中看到,现在的时间是晚上7点18分,但是导入到Excel中的电子邮件只是从今天下午2:17开始。 (我出于隐私的原因将其他列删除)

截图

最初,这些电子邮件只是从2014年5月的某个随机date开始粘贴的。我在Outlook 2013上删除了我的帐户并重新添加了该帐户,这就是Excel代码从今天下午2:17开始抓取它的时间,而不是几个月前。 基于此,我认为这与代码只能读取在创build帐户时链接到Outlook的PST文件有关,但我不完全确定。

我已经广泛地search了这个问题,似乎没有人遇到同样的问题。 我只想知道是否有一种方法可以修改我的代码,只抓取最近的电子邮件。 我不想抓取原始PST文件中的存档电子邮件。 每次执行代码时,有没有办法重buildPST文件? 有没有一种方法的代码只能从活动的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对象库引用。

您可以RestrictSort您所得到的Items …请参阅此处的MSDN参考: Items.Sort参考

例如,在循环之前:

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

(真是降序…)