我从Outlook检索具有特定主题行,日期和读取状态的邮件,并从邮件正文中解析信息。所有这些工作正常,但是我想将消息标记为已读,一旦完成,将使用以下代码返回超出范围的索引错误。
Function ExportEmails(Optional headerRow As Boolean = False) As String()`
Dim objOutlook As Object
Dim objNamespace As Object
Dim strFolderName As Object
Dim objMailbox As Object
Dim objFolder As Object
Dim mailFolderItems As Object
Dim folderItem As Object
Dim msg As Object
Dim myItem As Object
Dim tempString() As String
Dim answer As Integer
Dim i As Long
Dim numRows As Long
Dim startRow As Long
Dim unread As Integer
Dim strFilter As String
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set strFolderName = objNamespace.PickFolder
If strFolderName Is Nothing Then
Continue = False
Exit Function
End If`
'Restrict Subject
strFilter = "@SQL=" & VBA.Chr(34) & "http://schemas.microsoft.com/mapi/proptag/0x0037001E" & VBA.Chr(34) & " = 'Online request'"
Set mailFolderItems = strFolderName.items.restrict(strFilter)
'Restrict received date
If Options.today_only Then
Set mailFolderItems = mailFolderItems.restrict("[ReceivedTime] >'" & VBA.Format(Date - Options.days.Text, "DDDDD HH:NN") & "'")
End If
'Restrict unread only
If Options.Unread_only Then
Set mailFolderItems = mailFolderItems.restrict("[Unread] = True")
End If
'if calling procedure wants header row
If headerRow Then
startRow = 1
Else
startRow = 0
End If
numRows = mailFolderItems.Count
Total = 0
' resize array
ReDim tempString(1 To (numRows + startRow), 1 To 100)
' loop through folder items
For i = 1 To numRows
Set folderItem = mailFolderItems.Item(i)
If IsMail(folderItem) Then
Set msg = folderItem
With msg
tempString(i + startRow, 1) = .Subject
tempString(i + startRow, 2) = .HTMLBody
tempString(i + startRow, 3) = .CreationTime
tempString(i + startRow, 4) = .ReceivedTime
tempString(i + startRow, 5) = .Categories
tempString(i + startRow, 6) = .ConversationID
End With
If Options.mark_read Then
msg.unread = False
End If
Total = Total + 1
Application.StatusBar = "Progress: " & Total - 1 & " of " & numRows
End If
If i Mod 10 = 0 Then DoEvents
Next i
End Function
我也尝试过将msg.unread = False从循环中取出,并用下面的内容替换,但是我总是得到1或2条未标记为已读的消息。如果我再次运行它,将其标记为已读。
对于mailFolderItems中的每个msg msg.unread = False 下一个
感谢您的帮助。