将邮件代码为Outlook不动的最后一项
问题描述:
我想移动标记为读从我errorMails
文件夹到我的sentErrors
文件夹的邮件,这两者都是我mailOne
文件夹中。当前的代码对于我标记为已读的大多数邮件都有效,但是只留下最后一封读取的邮件。将邮件代码为Outlook不动的最后一项
我错过了什么吗?
Public Sub moveToSentFolder()
Dim obj As Object
Dim Items As Outlook.Items
Dim OutMail As Outlook.MailItem
Dim archiveFolder As Outlook.Folder
Dim mailOneFolder As Outlook.Folder
Dim sentErrorFolder As Outlook.Folder
Dim dumpErrorFolder As Outlook.Folder
Set archiveFolder = Outlook.Session.Folders("Archives")
Set mailOneFolder = archiveFolder.Folders("mailOne")
Set errorFolder = ehealthFolder.Folders("errorMails")
Set dumpErrorFolder = ehealthFolder.Folders("sentErrors")
'Dim Message As MailItem
Set Folder = Application.Session.GetDefaultFolder(olFolderInbox)
Set Items = errorFolder.Items
For i = Items.Count - 1 To 0 Step -1
With Items(i)
''Error 438 is returned when .receivedtime is not supported
On Error Resume Next
If .UnRead = False Then
If Err.Number = 0 Then
.Move dumpErrorFolder
Else
Err.Clear
End If
End If
MsgBox i 'debug
End With
Next
'For some reason the commented out code below only seems to move half of all the read mails, so I have to run the macro more than once to clear folder of read mails - this code now unused
'For Each Message In Items
'If Message.UnRead = False Then
''Message.Move dumpErrorFolder
'i = i + 1
'End If
'Next Message
End Sub
答
在VBA,项目可以具有不同的索引的边界 - 使用option base
或To
子句控制。在Office中,阵列从位置1(基于1的)开始索引,而不是0(基于0的)。您需要更改您的FOR
环路以适应此更改。
For i = Items.Count To 1 Step -1
又或者,你可以利用UBound
和LBound
以确定合适的索引边界。
For i = UBound(Items) To LBound(Items) Step -1