" GetGlobalAddressList"从远程Exchange服务器或本地缓存副本检索?

时间:2018-03-29 14:16:59

标签: excel vba excel-vba outlook

如果我运行此VBA子例程:

Public Sub ViewOutlookGlobalAddressListEntries()

    Dim olApp As Object
    Dim olNS As Object
    Dim olGAL As Object
    Dim olEntries As Object
    Dim olMember As Object

    Set olApp = CreateObject("Outlook.Application")
    Set olNS = olApp.GetNamespace("MAPI")
    Set olGAL = olNS.GetGlobalAddressList

    Set olEntries = olGAL.AddressEntries

' Loop through and display entries
    For Each olMember In olEntries
        Debug.Print olMember
    Next olMember

End Sub

我在全球地址列表中看到了所有电子邮件地址名称的列表。但是,我不确定这是从Exchange服务器还是从全局地址列表的本地缓存副本(位于C:\Users\<my username>\AppData\Local\Microsoft\Outlook)检索这些名称。

我想每天运行此子例程的变体,以便我可以使用对全局地址列表的任何更改来更新数据库。但是,我不知道此子例程是从Exchange检索实时数据还是从本地缓存的全局地址列表副本中检索旧数据。

如果是从我的本地缓存副本中检索,在将数据放入数据库之前,有没有办法使用VBA更新本地缓存副本? (要手动更新它,我会转到Outlook 2013,单击文件&gt;帐户设置&gt;下载地址簿)

更新

好吧,我拔掉了电脑的网络连接并运行了子程序。它仍然工作正常,因此它看起来像GetGlobalAddressList从我的本地缓存的全局地址列表副本中检索。现在我只需要弄清楚如何在数据库中更新这些值之前以编程方式更新地址列表的本地缓存副本

1 个答案:

答案 0 :(得分:0)

如果您的配置文件已缓存(使用OST文件),则GAL将存储在本地。如果它处于联机状态(未选中“使用缓存模式”),则所有数据都来自服务器。

请注意,从服务器下载最新的GAL更改可能需要最多24小时的Outlook。