使用Excel VBA统计后续电子邮件

使用Excel VBA统计后续电子邮件,excel,vba,outlook,Excel,Vba,Outlook,我正在使用Office 2013,我正在尝试获取我的一个电子邮件文件夹中的后续项目计数,该值将写入单元格 因此,在添加Outlook对象库引用后,我使用以下代码: Dim Folder As Outlook.MAPIFolder Dim objOL As Outlook.Application Set objOL = New Outlook.Application MailboxName = "mymailboxhere" Main_Folder_Name = "Inbox" Sub_Fol

我正在使用Office 2013,我正在尝试获取我的一个电子邮件文件夹中的后续项目计数,该值将写入单元格

因此,在添加Outlook对象库引用后,我使用以下代码:

Dim Folder As Outlook.MAPIFolder

Dim objOL As Outlook.Application
Set objOL = New Outlook.Application

MailboxName = "mymailboxhere"
Main_Folder_Name = "Inbox"
Sub_Folder_Name = "Test"

Set Folder = Outlook.Session.Folders(MailBoxName).Folders(Main_Folder_Name).Folders(Sub_Folder_Name)

Dim itms As Outlook.Items
Set itms = Folder.Items

Dim FollowupItms As Outlook.Items
Set FollowupItms = itms.Restrict("[FlagStatus] = 2")

Followup = FollowupItms.Count
Worksheets("Sheet1").Range("A1").Value = Followup
出于某种原因,我一直将Followup计数设置为0,即使至少有一封电子邮件标记为Followup

为了测试,我尝试了以下方法:

For Each Msg In itms
MsgBox Msg.FlagStatus
Next
其中一封电子邮件的Flagstatus为2,测试过程中Msgbox中会显示相同的状态

当计算未标记的电子邮件或标记为已完成的电子邮件时,该代码工作正常


这对我来说毫无意义。有什么想法吗?

MSDN说OlFlagStatus枚举:

。。。已弃用,不打算在代码中使用

(详情请参阅)

相反,请尝试
MailItem.FlagRequest
属性。例如

Set FollowupItms = itms.Restrict("[FlagRequest] = 'Follow up'")
您可以在MSDN上的
MailItem.FlagRequest
属性中找到相关信息,网址为
.

这很奇怪,但我发现了不同的方法,也许吧help@mrbungle我想在你发布的链接中使用这种方法,即如果flagstatus=2,则针对每个消息。。。。。。但是我有点希望找出我的代码不起作用的原因。我现在正在测试它,但使用FlagRequest似乎真的解决了问题:)但是有一个问题,使用FlagRequest作为后续,后续和完成的项目都被计算在内,有没有办法区分这两者,因为我只想限制标记为followup的邮件。好吧,我想出来了:
itms.restrict(“[FlagRequest]='Follow'和[FlagStatus]1”)
或者更简单的
itms.restrict([FlagStatus]>1”)
两者都在工作!不过,此FlagStatus已被弃用。此外,它还存在缺陷:当用作过滤器时,正如您已经注意到的,将其与olFlagMarked(强制转换为整数值2)进行比较将失败。1只是一个丑陋的解决办法。通过反复试验,我发现,在过滤器中使用olFlagMarked时,由于某种原因,它会映射到值8。同样,既然不推荐使用,最好不要使用它。我发现您还可以使用TaskCompletedDate属性,如果尚未完成,该属性的日期值为#1/1/4501#(请参见此处)。抱歉,修复了链接:请参见