VBA将Outlook邮件标记为已读

时间:2020-05-19 08:05:40

标签: excel vba

我从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 下一个

感谢您的帮助。

0 个答案:

没有答案