经过一些更多的搜索和测试,我想出了以下解决方案。这实际上是从这里的一个2009年的帖子在这里:Original VBA
它使用公共职能来建立文件夹的位置和一个子程序来查找60天以上的接收日期,并将这些文件移动到指定的位置。
的公共职能为:
Public Function GetFolder(strFolderPath As String) As MAPIFolder
Dim objNS As NameSpace
Dim colFolders As folders
Dim objFolder As MAPIFolder
Dim arrFolders() As String
Dim i As Long
On Error GoTo TrapError
strFolderPath = Replace(strFolderPath, "/", "\")
arrFolders() = Split(strFolderPath, "\")
Set objNS = GetNamespace("MAPI")
On Error Resume Next
Set objFolder = objNS.folders.Item(arrFolders(0))
If Not objFolder Is Nothing Then
For i = 1 To UBound(arrFolders)
Set colFolders = objFolder.folders
Set objFolder = Nothing
Set objFolder = colFolders.Item(arrFolders(i))
If objFolder Is Nothing Then
Exit For
End If
Next
End If
On Error GoTo TrapError
Set GetFolder = objFolder
Set colFolders = Nothing
Set objNS = Nothing
Exit_Proc:
Exit Function
TrapError:
MsgBox Err.Number & " " & Err.Description
End Function
,做实际工作的子程序如下。
我添加了Pass作为Integer以允许例程在两个不同的源文件夹和目标文件夹中工作。如果我将子名称更改为Application_Startup,它将在Outlook启动时运行。
PST文件夹名称\存档 - 收件箱 - 在Outlook PST文件夹名称与子文件夹
电子邮件帐户名称\收件箱 - 在Outlook帐户名与子文件夹
Sub MoveOldEmail()
Dim oItem As MailItem
Dim objMoveFolder As MAPIFolder
Dim objInboxFolder As MAPIFolder
Dim i As Integer
Dim Pass As Integer
For Pass = 1 To 2
If Pass = 1 Then
Set objMoveFolder = GetFolder("PST Folder Name\Archive-Inbox")
Set objInboxFolder = GetFolder("Email Account Name\Inbox")
ElseIf Pass = 2 Then
Set objMoveFolder = GetFolder("PST Folder Name\Archive-Sent Items")
Set objInboxFolder = GetFolder("Email Account Name\Sent Items")
End If
For i = objInboxFolder.Items.Count - 1 To 0 Step -1
With objInboxFolder.Items(i)
''Error 438 is returned when .receivedtime is not supported
On Error Resume Next
If .ReceivedTime < DateAdd("d", -60, Now) Then
If Err.Number = 0 Then
.Move objMoveFolder
Else
Err.Clear
End If
End If
End With
Next
Next Pass
Set objMoveFolder = Nothing
Set objInboxFolder = Nothing
End Sub
希望这可以帮助别人其他。
那么你有麻烦访问次帐户的收件箱?或者将特定帐户收到的消息过滤到由多个POP3/SMTP帐户共享的收件箱中? –
我无法访问次帐户的收件箱/发送文件夹。这两个帐户是分开的。我没有给两个帐户提供单个收件箱。我发现这个'Set objNewMailItems = GetFolderPath(“Secondary Mailbox Name \ Inbox”)。Items'that looks like I can specify a account to look in。我只需要修改我的测试脚本以查看它是否有效。 – DCDimon