在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是否被拒绝。
答案 0 :(得分:0)
看看AppointmentItem.ResponseStatus属性,该属性返回一个OlResponseStatus
常量,该常量指示约会的当前用户的会议的总体状态。
此外,不要遍历文件夹中的所有项目并根据定义的条件(主题和开始日期)获取它们:
For Each oObject In oFolder.Items
您需要使用Find
类的FindNext
/ Restrict
或Items
方法。 Find方法查找并返回一个Outlook项目,该项目指定提供的筛选器。它接受反映结果项应满足的条件的字符串值。字符串的格式取决于您要过滤的字段类型。请注意,有些项目属性不能用于过滤器。您可以在MSDN上详细了解用于搜索条件的过滤器字符串和字符串格式所不允许的属性。
在以下文章中了解有关这些方法的更多信息:
您还可以找到AdvancedSearch
类的Application
方法,该方法在Outlook中具有以下优点:
AdvancedSearch
方法会在后台自动运行该线程。Restrict
和Find
/ FindNext
方法可以应用于特定的Items
集合(请参阅Outlook中Items
类的Folder
属性)。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