我正在尝试获取许多Outlook Exchange用户的FreeBusy
信息,其中包括他们(和我)的定期约会。
我可以使用该代码来处理普通约会,但是当我尝试确保其他人不在定期约会中时(它不会随“忙/闲”功能一起返回),我陷入了困境。
Public Sub GetFreeBusyForAPerson()
Dim usersList As Outlook.AddressEntries
Dim oEntry As Outlook.AddressEntry
Dim oContact As Object
Set usersList = Outlook.Application.Session.AddressLists.Item("All Users").AddressEntries
Set oEntry=usersList.Item("Jones; Jonathan")
Debug.Print
Mid(oEntry.GetExchangeUser().GetFreeBusy(CDate("08/01/2019"), 60, False), 1, 48)
End Sub
我回来了000000000000000000000000000000000000000000000000
我知道此人在相关日期有定期约会,但未显示。
答案 0 :(得分:2)
我发现您的问题很有趣。我无权访问GetExchangeUser().GetFreeBusy
,因此不知道您是否正确使用了该方法。也许具有相关知识的人会让您正确。但是,如果问题出在GetFreeBusy
上,那有没有一种替代方法可以为您提供所需的功能。自从我玩日历项目已经有好几年了,我认为刷新我的知识会很有趣。
我的回忆是我可以访问同事的日历。但是,如果这不可能,那么有什么替代方法可用?无法在多个系统上自动安装Outlook宏,因此我想尝试使用Excel。包含Outlook访问宏的Excel工作簿可以轻松分发。该宏可以访问默认日历,提取所需信息并通过电子邮件发送给您吗?这不是一个理想的解决方案,但是如果它可行,我相信它将提供可以接受的第二佳选择。如果可行,则可以在Excel中开发的代码作为Outlook宏分发,并链接到在发送带有特定主题的电子邮件时激活该宏的规则。这将使您对流程的控制几乎与您希望使用当前解决方案所能拥有的一样。
关键问题是:Excel宏可以访问Outlook日历中的所有数据吗?事实证明,访问日历比我想象的要容易。但是,由于我发现文档令人困惑,因此找到重复项目的例外情况非常棘手。但是,通过仔细使用Debug's Watch来研究AppointmentItem
和重复出现的AppointmentItem
的{{1}}的内容,我能够发现异常的存储位置。
当我完成调查宏时,德米特里(Dmitry)表示RecurringPattern
可以处理定期约会。通过阅读他对其他问题的回答,很明显他具有丰富的专业知识,因此我倾向于相信他。他想知道GetFreeBusy
是否没有创建您期望的日期。从您的答复看来,这似乎不太可能。你可以试试看。 CDate("08/01/2019")
可以消除任何歧义,但我怀疑这是问题所在。
我认为我的调查宏会有所帮助。我仅在日历项上对其进行了测试,因此可能需要进一步调试。您的DateSerial(2019, 1, 8)
将包含我的属性,因此您可能需要增强我的宏。
我的宏由三个常量控制:
AppointmentItem
宏的报告期从Const DateReportLen As Long = 1 '\ Together identify the length of
Const DateReportLenType As String = "yyyy" '/ the report period
Const DateReportStartOffset As Long = -363 '\ The offset from today to the start of
'| the report period. Set to a positive
'/ value for a date in the future
开始。值-365允许有一个从2018年1月1日开始的期间。两个Now() + DateReportStartOffset
常量使我可以将期间结束日期设置为开始日期之后的一年。您将需要调整这些值,以便仅在2019年1月8日或可能在几天后才报告。
该宏会在您的桌面上创建一个名为“ Calendar.txt”的文件。您可以根据需要更改位置和名称。该文件包含我认为与报告期内或部分在报告期内的每个DateReportLen
相关的每个属性。通过检查这些属性,您可能会发现同事的日历不符合您的预期。
请注意,如果打开Outlook,我的宏似乎无法使用。我没有调查这个问题
该宏需要引用“ Microsoft Outlook nn.n库”,其中“ nn.n”标识您使用的Office版本。
输出文件的宏需要引用“ Microsoft ActiveX数据对象n.n库”。几年来,“ n.n”一直是“ 6.1”。
AppointmentItem
答案 1 :(得分:0)
GetFreeBusy可以很好地用于定期约会。您确定日期编码正确吗?是“ 08/01/2019”应该是2019年8月1日还是2019年1月8日? 请记住,当前语言环境用于转换。
答案 2 :(得分:0)
FreeBusy将在交换用户资源设置的工作时间范围内工作,但是似乎在这些时间之外无法工作。将继续调查并检查我是否可以(a)通过VBA确定交换用户的工作时间(尽管初步调查表明我无法做到这一点),以及(b)检查何时该功能可以使用私人约会(每次工作期间)用户的工作时间)。 感谢您提供的所有帮助,我真的很喜欢本网站,并感谢提供的帮助!