【发布时间】:2016-07-04 13:41:21
【问题描述】:
我正在尝试为 Outlook 2007 编写一个 VBA 脚本,如果用户的邮件超过 89 天,它将移动到“过期”文件夹。我有执行此操作的代码,但它似乎不适用于发往包含最终用户的通讯组的旧电子邮件。它适用于刚刚发送给最终用户的电子邮件。
我结合了我在网上找到的代码 a) 在电子邮件有一定天数时移动它们 (http://www.slipstick.com/developer/macro-move-aged-mail/),以及 b) 通过文件夹递归以将代码也应用于子文件夹 (Can I iterate through all Outlook emails in a folder including sub-folders?)。此代码通过收件箱文件夹和子文件夹递归移动所有过期邮件。
它或多或少有效,但由于某种原因,发送到包含最终用户的分发列表的电子邮件没有被接收。我唯一值得注意的检查是
If TypeName(oItem) = "MailItem"
分发列表电子邮件是否不被视为 MailItems?如果没有,我如何确保也抓住这些?
完整代码如下:
Public Sub MoveAgedMail(Item As Outlook.MailItem)
Dim objOutlook As Outlook.Application
Dim objNamespace As Outlook.NameSpace
Dim objSourceFolder As Outlook.MAPIFolder
Dim objVariant As Variant
Dim lngMovedItems As Long
Dim intCount As Integer
Dim intDateDiff As Integer
Dim strDestFolder As String
Dim Folder As Outlook.MAPIFolder
Dim oFolder As Outlook.MAPIFolder
Dim oMail As Outlook.MailItem
Set objOutlook = Application
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objSourceFolder = objNamespace.GetDefaultFolder(olFolderInbox)
' Call processFolder
processFolder objSourceFolder
End Sub
Public Sub processFolder(ByVal oParent As Outlook.MAPIFolder)
Dim oFolder As Outlook.MAPIFolder
Dim oMail As Outlook.MailItem
Dim oItem As Object
Dim intCount As Integer
Dim intDateDiff As Long
Dim objDestFolder As Outlook.MAPIFolder
' "Expired" folder at same level as Inbox for sending aged mail
Set objDestFolder = Session.GetDefaultFolder(olFolderInbox).Parent.Folders("Expired")
For Each oItem In oParent.Items
If TypeName(oItem) = "MailItem" Then
Set oMail = oItem
' Check if email is older than 89 days
intDateDiff = DateDiff("d", oMail.SentOn, Now)
If intDateDiff > 89 Then
' Move to "Expired" folder
oMail.Move objDestFolder
End If
End If
Next oItem
' Recurse through subfolders
If (oParent.Folders.Count > 0) Then
For Each oFolder In oParent.Folders
processFolder oFolder
Next
End If
Set objDestFolder = Nothing
End Sub
【问题讨论】:
-
问题邮件是否通过
TypeName()测试? -
我认为它的击球手使用 For Loop With Step Backwards 然后在移动
mailitems时使用For Each
标签: vba email outlook outlook-2007