我正在尝试在分发列表中获取用户的详细信息(包含约200人(。
当我创建新电子邮件时,将此DL添加为唯一的收件人,并在下面运行宏,它返回〜15个结果,然后" Outlook试图从Microsoft Exchange Server中检索数据"托盘消息出现,然后出现一些时间我会遇到"操作失败"错误。
如果我继续执行代码,则返回下一个〜15个值,并且此问题重新出现。接缝就像有一些交换反垃圾邮件限制。
Sub GetDetails(olMail As MailItem)
Dim i As Integer, j As Integer
For i = 1 To olMail.Recipients.Count ' count = 1
If olMail.Recipients.Item(i).AddressEntry.GetExchangeUser Is Nothing Then
For j = 1 To olMail.Recipients.Item(i).AddressEntry.Members.Count ' count ~= 200
Debug.Print olMail.Recipients.Item(i).AddressEntry.Members.Item(j).GetExchangeUser.FirstName
Next j
End If
Next i
End Sub
但是,如果我扩展了分发列表(使用' '图标(并运行稍微修改的代码,则返回所有用户的结果,没有任何问题(仅花几秒钟(。
Sub GetDetails(olMail As MailItem)
Dim i As Integer
For i = 1 To olMail.Recipients.Count ' count ~= 200
If Not olMail.Recipients.Item(i).AddressEntry.GetExchangeUser Is Nothing Then
Debug.Print olMail.Recipients.Item(i).AddressEntry.GetExchangeUser.FirstName
End If
Next i
End Sub
有什么想法?
您需要在代码中立即发布Outlook Com对象。如果您的加载项尝试在Microsoft Exchange Server上存储的收藏集中的256多个Outlook项目,这一点尤其重要。如果您不及时释放这些对象,则可以在任何时候以最大打开的物品数量交换来达到限制。完成后,只需将变量设置为一无所有即可发布对对象的引用。
基于尤金的反馈更新(工作(代码:
Sub GetDetails(olMail As MailItem)
Dim oRecipients As Recipients
Dim oRecipient As Recipient
Dim oMembers As AddressEntries
Dim oMember As AddressEntry
Dim i As Integer, j As Integer, dRecCnt As Integer, dMemCnt As Integer
Set oRecipients = olMail.Recipients
dRecCnt = oRecipients.Count
For i = 1 To dRecCnt
Set oRecipient = oRecipients.Item(i)
If oRecipient.AddressEntry.GetExchangeUser Is Nothing Then
Set oMembers = oRecipient.AddressEntry.Members
dMemCnt = oMembers.Count
For j = 1 To dMemCnt
Set oMember = oMembers.Item(j)
Debug.Print c & ": " & oMember.GetExchangeUser.FirstName
Set oMember = Nothing
Next j
Set oMembers = Nothing
End If
Set oRecipient = Nothing
Next i
Set oRecipients = Nothing
End Sub