Excel 正在读取定期事件的AppointItem.GlobalAppointId导致问题
我发现,当我通过Excel VBA代码读取Outlook中重复事件的GlobalAppointId时,事情开始变得奇怪 下面是我一直在使用的代码的一部分,我试图了解这种行为的根本原因:Excel 正在读取定期事件的AppointItem.GlobalAppointId导致问题,excel,vba,outlook,Excel,Vba,Outlook,我发现,当我通过Excel VBA代码读取Outlook中重复事件的GlobalAppointId时,事情开始变得奇怪 下面是我一直在使用的代码的一部分,我试图了解这种行为的根本原因: For Each otItem In resCal If otItem.Class = olAppointment Then Set cItm = otItem If calItem.Subject = "Coffee Date" Then Deb
For Each otItem In resCal
If otItem.Class = olAppointment Then
Set cItm = otItem
If calItem.Subject = "Coffee Date" Then
Debug.Print "Coffee orig " & cItm.Start
Debug.Print "Coffee orig 1.1 " & cItm.Start
Debug.Print cItm.GlobalAppointmentID
Debug.Print cItm.GlobalAppointmentID
Debug.Print "Coffee orig 1.5 " & cItm.Start
End If
End If
Next otItem
这将产生以下输出:
- 咖啡起源于2015年4月16日上午10:00:00
- 咖啡起源1.1 2015年4月16日上午10:00:00
- [全球预约ID已编辑,但相同]
- [全球预约ID已编辑,但相同]
- 咖啡源1.5 2015年2月19日上午10:00:00
我建议使用for循环,并尽快释放对象。如果代码试图枚举存储在Microsoft Exchange服务器上的集合中超过256个Outlook项目,则这一点尤为重要。如果您不及时释放这些对象,您可以达到Exchange对任何时间打开的最大项目数施加的限制。在函数作用域(循环作用域)中声明一个对象,并将其设置为“无”,以尽快释放对该对象的引用。我最近再次查看了我的代码,并确定了问题的根源。以下是导致问题的代码片段:
With oItms
.Sort "[Start]", False
.IncludeRecurrences = True
End With
Set rCal = oItms.Restrict("[Start] >= '" & CStr(date) & "'")
With rCal
.Sort "[Start]", False
.IncludeRecurrences = True
End With
具体来说,在rCal上运行“.Sort”和“.includeCurrences”而不调用“.Restrict”方法会导致问题。我确定第二个“With”是多余的,所以我删除了它。现在,我可以按任何顺序调用任何属性,而不必担心值的变化。您是否能够在没有循环的情况下重现该问题?就一个约会项目?这是Exchange配置文件吗?我没想过要测试这个。我只是这样做了,事实上,当我通过索引调用AppointItem而不是通过For Each循环调用AppointItem时,问题并没有出现。这个电子邮件地址是用来工作的,我敢肯定我们用的是Exchange。