【发布时间】:2020-04-01 12:44:28
【问题描述】:
我正在尝试将 Outlook 电子邮件导出到 Excel。下面的代码,出于某种未知的原因,只导出了 21 个邮件项。我做错了什么?
数组 olItems 有 1140 个项目。我不明白为什么控件在 21 项之后就跳出循环。
Option Explicit
Sub list_email_info()
Dim xlApp As Excel.Application
Dim xlwb As Excel.Workbook
Dim i As Long
Dim arrHeader As Variant
Dim oINS As NameSpace
Dim oIInboxFolder As MAPIFolder
Dim olItems As Items
Dim olMailItem As MailItem
arrHeader = Array("Date Created", "Subject", "Sender's Name", "Unread")
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set xlwb = xlApp.Workbooks.Add
Set oINS = GetNamespace("MAPI")
Set oIInboxFolder = oINS.GetDefaultFolder(olFolderInbox).Folders("OST")
Set olItems = oIInboxFolder.Items
i = 1
On Error Resume Next
xlwb.worksheets(1).Range("A1").Resize(1, UBound(arrHeader) + 1).Value = arrHeader
For Each olMailItem In olItems
xlwb.worksheets(1).cells(i + 1, "A").Value = olItems(i).CreationTime
xlwb.worksheets(1).cells(i + 1, "B").Value = olItems(i).Subject
xlwb.worksheets(1).cells(i + 1, "C").Value = olItems(i).SenderName
xlwb.worksheets(1).cells(i + 1, "D").Value = olItems(i).UnRead
i = i + 1
Next olMailItem
MsgBox "Done"
xlwb.worksheets(1).cells.entirecolumn.autofit
Set xlwb = Nothing
Set xlApp = Nothing
Set olItems = Nothing
Set oIInboxFolder = Nothing
Set oINS = Nothing
End Sub
@Ben - 我已按照建议进行了修改,但仍然出现类型不匹配错误
@Ben - 当我尝试在编辑器中“运行”代码时出现以下错误。以前没有发生这种情况。
【问题讨论】:
-
注释掉
On Error Resume Next。您是否收到错误消息,错误消息是什么? -
很有可能您在该文件夹中的项目不是
MailItems:When is a MailItem not a MailItem -
所以,我注释掉了 On Error Resume Next。当我观看“olItems”时,它错误地显示为“类型不匹配”,因为 oIItems =nothing。但是,当我在 IDE 中按下“运行”按钮时,控件会赶上循环中的下一项。
-
您想测试该项目是否为
MailItem。 -
这个答案与我的完全一模一样。它使用
TypeOf来测试项目的类型。