gpt4 book ai didi

Excel-VBA 从 Outlook AddressList 中获取筛选的集合

转载 作者:行者123 更新时间:2023-12-02 11:26:59 25 4
gpt4 key购买 nike

问题:
在我看来 AddressList没有内置过滤器功能,例如 C# DataTable (DatTableObject.Select(过滤条件),我正在寻找一种方法来做到这一点。

我正在访问的全局地址列表有大约一百万个条目,我需要搜索它多达 1000 次。

我正在使用交换用户名查找人们的电子邮件,使用以下代码:

Set olApp = CreateObject("Outlook.Application")
Set myNamespace = olApp.GetNamespace("MAPI")
Set aList = myNamespace.AddressLists.Item("Global Address List")
Set aEntry = aList.AddressEntries("" + ExchangeName + "")
Set exUser = aEntry.GetExchangeUser

但它只检索我一个 AddressEntry,当我有几个具有相同 Exchange 名称的人时,这是一个问题 - 经常发生。

问题:当我在 Outlook 中搜索全局地址列表时,所有内容都按字母顺序排序并且速度很快,所有匹配项都以我输入的字符串开头。如何在 VBA 中获得类似的集合?

最佳答案

AddressEntries对象是 AddressEntry 的集合对象。
当您直接索引到 AddressEntries集合,你返回一个 AddressEntry基于 Index 的对象提供的参数。 Index参数可以是索引号,也可以是项目的默认属性。

由于 AddressEntry 的默认属性项目是 .Name属性,返回是集合中与 .Name 匹配的任何第一项。属性(property)。

如果要全部退回AddressEntry集合中与 .Name 匹配的对象属性,您将需要遍历集合。

现在,在 .Net 中,您可以使用 For...Next 遍历集合。 ,我相信你也可以在 VBA 中做到这一点,但我就是想不起来。
例如。:

Set olApp = CreateObject("Outlook.Application")
Set myNamespace = olApp.GetNamespace("MAPI")
Set aList = myNamespace.AddressLists.Item("Global Address List")
Set aEntries = aList.AddressEntries
For each aEntry in aEntries
if aEntry.Name="" + ExchangeName + "" Then
'Do something with aEntry object
End If
Next

如果由于某种原因不起作用,您可以使用 GetFirst 遍历集合。和 GetNext方法。
例如。:
Set olApp = CreateObject("Outlook.Application")
Set myNamespace = olApp.GetNamespace("MAPI")
Set aList = myNamespace.AddressLists.Item("Global Address List")
Set aEntries = aList.AddressEntries
Set aEntry = aEntries.GetFirst
Do While Not aEntry is Nothing
if aEntry.Name="" + ExchangeName + "" Then
'Do something with aEntry object
End If
Set aEntry = aEntries.GetNext
Loop

至于按字母排序,看看 Sort Method .

就构建功能而言

...I am presented with all matches starting with the string I type in.



我不确定你想如何“呈现”匹配项,或者你想在哪里输入字符串。但一般的想法是创建一个接受输入参数的函数(例如 "MatchName" As String )并执行类似上面的循环以查找该字符串上您想要查看的任何属性的所有匹配项,然后您将返回一个数组,或者您可以用来“呈现”信息的东西。

如果您想使其动态化,以便“在您键入时”更新列表,您可以从 KeyPress 运行更新过程。事件。为了在您输入一个单词时不遍历整个集合,您可能希望存储该数组,然后在键入每个额外的字母时,您可以遍历该数组并删除不匹配项(缩小结果)。在此之前,您可能需要进行某种检查以查看是否删除了一个字母(例如检查文本框中字符串的长度),这会告诉您的程序重新运行对 AddressEntries 的检查。收集(扩大结果)。

无论如何,这是你可以做到的一种方式的一般想法。

关于Excel-VBA 从 Outlook AddressList 中获取筛选的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14382557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com