在VBA中获取Outlook的自动完成地址列表

时间:2015-07-20 12:23:26

标签: vba autocomplete outlook

我正在尝试添加所有"自动完成的地址"到新的联系人文件夹但我无法获得这些地址。我打电话给#34;自动填充地址"是您向某人发送电子邮件时保存的地址,然后您在" To"新电子邮件的领域。

我知道我可以使用

获取所有全局地址列表
Set objOutlook = CreateObject("Outlook.Application")
Set myNameSpace = objOutlook.GetNamespace("MAPI")    
Set GAL = myNameSpace.AddressLists("Offline Global Address List")

但我怎样才能获得自动填充地址?

我使用的是Outlook 2010,我的帐户是一个Exchange帐户。

感谢您的帮助和时间。

修改

我的完整代码:

Set objOutlook = CreateObject("Outlook.Application")
Set myNameSpace = objOutlook.GetNamespace("MAPI")
Set folder = myNameSpace.GetDefaultFolder(OlDefaultFolders.olFolderInbox)
Set storage = folder.GetStorage("IPM.Configuration.Autocomplete", OlStorageIdentifierType.olIdentifyByMessageClass)
Set propacc = storage.PropertyAccessor
Set got = propacc.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x7C090102")

问题:得到的是空的......

2 个答案:

答案 0 :(得分:0)

自动完成(昵称)流存储在隐藏(关联)消息中,消息类别为" IPM.Configuration.Autocomplete"在收件箱文件夹中。其格式记录在https://msdn.microsoft.com/en-us/library/office/ff625288.aspx。您可以使用MAPIFolder.GetStorage访问该邮件。

如果使用Redemption是一个选项,则会通过RDOStore / RDOSessionNicknames集合公开昵称。

另请注意,在Outlook VBA的情况下,您确实需要创建Outlook.Application对象的实例,您已经有一个指向该对象的内部Application变量。

答案 1 :(得分:0)

而不是

Set got = propertyAcc.GetProperty(yadayada)

不要使用Set ...只是

got = propertyAcc.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x7C090102")

这将给出文本流中使用的从零开始的字节数组 得(0)= 13 得到(1)= 240 等等...

从那里,您可以分析每个字节以获取文本......但是当Redemption为您执行此操作时,解析它将会非常难看。事实上,如果你在帖子中已经做到这一点,那么你可能已经解决了如何更好地利用时间来弄清楚如何使用Redemption而不是为此目的构建自己的解析器