在 For Each 循环中标记已读项目会留下一些标记为未读的项目
Marking items read in a For Each loop leaves some marked unread
我正在尝试将从 Outlook 子文件夹复制到收件箱到文件系统文件夹中的邮件标记为已读。
Sub demo1()
Dim objNS As Outlook.NameSpace
Dim objFolder As Outlook.MAPIFolder
Dim path As String
Dim i As Integer, iUnred As Integer
Dim objUnreadItems As Object, m As Object, att As Object, Item As Object
Set objNS = GetNamespace("MAPI")
Set objFolder = objNS.Folders.Item("user@email.com") ' folders of your current account
Set objFolder = objFolder.Folders("Inbox")
Set objFolder = objFolder.Folders("SubFolder")
Set objUnreadItems = objFolder.Items.Restrict("[UnRead] = True")
' Debug.Print objUnreadItems.Count
If objUnreadItems.Count = 0 Then
' MsgBox "NO objUnreadItems Email In Inbox" TODO: add to logfile
Else
For Each Item In objUnreadItems
'Debug.Print objUnreadItems.Count
path = "C:\temp\" & Item.Subject & ".msg"
Item.SaveAs path, olMSG
'Debug.Print Item.ConversationTopic
' Item.unRead = False
Next
For Each Item In objFolder.Items.Restrict("[UnRead] = True")
Debug.Print objUnreadItems.Count & ": " & Item.ConversationTopic
Item.unRead = False
Next
End If
End Sub
输出如下:
9:RMA# 2832844 FA 报告
9: RMA FA 报告# 2828196
8: RMA FA 报告# 2827687
7:RMA FA 报告# 2827667
6:RMA FA 报告# 2832909
所有消息都显示在 c:\temp 中,但九条消息中只有五条标记为已读。
您正在修改(通过设置 UnRead
属性)集合的元素。将 for each
替换为向下循环:
for i = objUnreadItems.Count to 1 step -1
set item = objUnreadItems(i)
path = "C:\temp\" & Item.Subject & ".msg"
Item.SaveAs path, olMSG
Item.UnRead = False
next
您可能还想通过删除无效(对于文件名)字符来清理文件名,例如 :
.
我正在尝试将从 Outlook 子文件夹复制到收件箱到文件系统文件夹中的邮件标记为已读。
Sub demo1()
Dim objNS As Outlook.NameSpace
Dim objFolder As Outlook.MAPIFolder
Dim path As String
Dim i As Integer, iUnred As Integer
Dim objUnreadItems As Object, m As Object, att As Object, Item As Object
Set objNS = GetNamespace("MAPI")
Set objFolder = objNS.Folders.Item("user@email.com") ' folders of your current account
Set objFolder = objFolder.Folders("Inbox")
Set objFolder = objFolder.Folders("SubFolder")
Set objUnreadItems = objFolder.Items.Restrict("[UnRead] = True")
' Debug.Print objUnreadItems.Count
If objUnreadItems.Count = 0 Then
' MsgBox "NO objUnreadItems Email In Inbox" TODO: add to logfile
Else
For Each Item In objUnreadItems
'Debug.Print objUnreadItems.Count
path = "C:\temp\" & Item.Subject & ".msg"
Item.SaveAs path, olMSG
'Debug.Print Item.ConversationTopic
' Item.unRead = False
Next
For Each Item In objFolder.Items.Restrict("[UnRead] = True")
Debug.Print objUnreadItems.Count & ": " & Item.ConversationTopic
Item.unRead = False
Next
End If
End Sub
输出如下:
9:RMA# 2832844 FA 报告
9: RMA FA 报告# 2828196
8: RMA FA 报告# 2827687
7:RMA FA 报告# 2827667
6:RMA FA 报告# 2832909
所有消息都显示在 c:\temp 中,但九条消息中只有五条标记为已读。
您正在修改(通过设置 UnRead
属性)集合的元素。将 for each
替换为向下循环:
for i = objUnreadItems.Count to 1 step -1
set item = objUnreadItems(i)
path = "C:\temp\" & Item.Subject & ".msg"
Item.SaveAs path, olMSG
Item.UnRead = False
next
您可能还想通过删除无效(对于文件名)字符来清理文件名,例如 :
.