excel VBA:限制和过滤全局地址列表对象中的条目以减少循环运行时间

db2dz4w8  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(81)

通过VBA宏,我希望在全局地址列表中找到特定的条目,更具体地说,我希望找到以特定前缀开头的通讯组列表。
问题是GAL包含数千个条目。一个正常的循环需要很长时间。我跑过马路。限制和。过滤方法,但我找不到一种方法来使它们工作。
有没有人有一个有效的例子?我在Windows 11上运行Office版本2302。
先谢谢你。

vawmfj5a

vawmfj5a1#

你不能在Outlook对象模型中这样做--你可以循环遍历所有GAL条目,但是这太慢了,而且对于大型GAL容器会失败(正如你所注意到的)。
在Extended MAPI(C++或 Delphi )中,您可以创建PR_ANR限制,以获取给定地址簿容器中的所有匹配项-这是Outlook用于显示不明确条目列表的方式。
如果可以选择使用Redemption(我是它的作者),你可以使用RDOSession.AddressBook.GAL.ResolveNameEx来返回一个匹配列表:

set rSession = CreateObject("Redemption.RDOSession")
  rSession.MAPIOBJECT = Application.Session.MAPIOBJECT
  set AdrrEntries = rSession.AddressBook.GAL.ResolveNameEx("joe")
  Debug.Print AdrrEntries.Count & " names were returned by ResolveNameEx:"
  Debug.Print "------------"
  for each AE in AdrrEntries
    Debug.Print AE.Name
  next
  Debug.Print "------------"

相关问题