經過一些更多的搜索和測試,我想出了以下解決方案。這實際上是從這裏的一個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