检查约会响应状态

时间:2019-08-19 23:24:26

标签: excel vba outlook

在Excel的Outlook日历中遍历一系列约会。每次约会都发送给两个人-组织者和与会者。

发给与会者的电子邮件的格式为employeeid@contoso.com,但在收件人列表上,employee.name @ contoso.com会自动添加,并且是响应状态的收件人名称。

如何检查针对用户电子邮件地址(fullname@contoso.com)记录的此响应状态-但是邀请发送到别名(employeeid@contoso.com)-这只是我拥有的员工ID进行检查。

到目前为止,该循环在给定员工ID的日历约会上执行,检查约会的主题是否包含员工ID并在将来进行检查。

For Each oObject In oFolder.Items
    If oObject.Class = olAppointment.Item Then
        Set oMeetingItem = oObject
        If InStr(oMeetingItem.Subject, EmpID) And _
            (oMeetingItem.Start > Date() ) And _ 
            ( insert check on employee.name@contoso.com > )
            ' Do something

是否因为employeeid@contoso.com是别名而添加了此额外收件人?

更新

我检查了几个约会的ResponseStatus。他们的评价都为1-olResponseOrganized-甚至与会者拒绝的约会。

我可以使用以下方法查看每个与会者的回复状态:

            ' LOOP OVER ATTENDEES AND IF DECLINED THEN DELETE FROM CALENDAR
        Set objAttendees = oMeetingItem.Recipients
        For Each objAttendee In objAttendees
            If objAttendee.MeetingResponseStatus = olResponseDeclined Then
                oMeetingItem.Delete
                ' other statements
            End If
        Next

还有一种更简便的方法来检查employee@contoso.com是否被拒绝。

2 个答案:

答案 0 :(得分:0)

看看AppointmentItem.ResponseStatus属性,该属性返回一个OlResponseStatus常量,该常量指示约会的当前用户的会议的总体状态。

此外,不要遍历文件夹中的所有项目并根据定义的条件(主题和开始日期)获取它们:

For Each oObject In oFolder.Items

您需要使用Find类的FindNext / RestrictItems方法。 Find方法查找并返回一个Outlook项目,该项目指定提供的筛选器。它接受反映结果项应满足的条件的字符串值。字符串的格式取决于您要过滤的字段类型。请注意,有些项目属性不能用于过滤器。您可以在MSDN上详细了解用于搜索条件的过滤器字符串和字符串格式所不允许的属性。

在以下文章中了解有关这些方法的更多信息:

您还可以找到AdvancedSearch类的Application方法,该方法在Outlook中具有以下优点:

  • 搜索是在另一个线程中执行的。您无需手动运行其他线程,因为AdvancedSearch方法会在后台自动运行该线程。
  • 可以在任何位置(即超出某个文件夹的范围)搜索任何项目类型:邮件,约会,日历,便笺等。 RestrictFind / FindNext方法可以应用于特定的Items集合(请参阅Outlook中Items类的Folder属性)。
  • 完全支持DASL查询(自定义属性也可用于搜索)。您可以在MSDN的Filtering文章中了解有关此内容的更多信息。为了提高搜索性能,如果为商店启用了“即时搜索”,则可以使用“即时搜索”关键字(请参阅Store类的IsInstantSearchEnabled属性)。
  • 您可以随时使用Stop类的Search方法停止搜索过程。

答案 1 :(得分:0)

我找不到从邀请发送到的别名中获取主要smtp地址以检查响应状态的方法。

代替此功能,如果有人拒绝,此函数将检查约会并循环返回“ True”的收件人:

Function CheckForDeclines(oMeetingItem As Object) As Boolean
Dim objAttendee As Recipient
Dim objAttendees As Recipients

Set objAttendees = oMeetingItem.Recipients

For Each objAttendee In objAttendees
    If objAttendee.MeetingResponseStatus = olResponseDeclined Then
        CheckForDeclines = True
        End Function
    End If
Next objAttendee
End Function

按照前面的答案,获取项目列表的更好方法是使用Restrict

Dim restrictedItems As Outlook.Items
Dim dateRestrictedItems As Outlook.Items
Dim finalRestrictedItems As Outlook.Items
Dim oMeetingItem As Outlook.AppointmentItem
Set ns = olApp.GetNamespace("MAPI")
Set nsOther = ns.CreateRecipient("user@constoso.com")

Set oFolder = ns.GetFolderFromID("000000004BE5311AB6885142BD830C7FA8991BF601004167A737474922409B71F960AFD45A65")

Set restrictedItems = oFolder.Items

' Construct filter for items in the future
tdyDate = Format(Date, "Short Date")
strRestriction = "[Start] >= '" & tdyDate & "'"
Set dateRestrictedItems = oFolder.Items.Restrict(strRestriction)

' Construct a filter for subjects that contain ”test”.
Const PropTag  As String = "http://schemas.microsoft.com/mapi/proptag/"
strRestriction = "@SQL=" & Chr(34) & PropTag _
& "0x0037001E" & Chr(34) & " like '%test%'"

Set finalRestrictedItems = dateRestrictedItems.Restrict(strRestriction)

For Each oApt In finalRestrictedItems
     Debug.Print (oApt.Subject & " " & oApt.Start)
     Debug.Print (oApt.ResponseStatus)
Next