从GAL

时间:2017-04-06 14:18:44

标签: vba contacts outlook-vba gal

我正在尝试从GAL更新联系人列表。

更新联系人列表的系统是我的宏删除给定文件夹中的所有联系人,然后从GAL添加联系人始终是最新的联系人。这会产生这样的问题:如果您向联系人添加家庭地址或个人电话,则在更新联系人列表后会丢失它们。

我有一个宏可以在GAL中查找符合特定要求(我们的办公地点)的联系人。

现在是棘手的部分

  1. 如果某个联系人(基于全名)已经在我的联系人列表中,那么我想更新所有公司专用字段(例如:公司名称,职位等)但是要将所有其他字段保留为他们是。

  2. 如果联系人不在我的联系人列表中:添加 - 工作

  3. 如果我的联系人列表中的联系人未与GAL中的任何内容匹配(表示该人离开公司),则删除所有公司专用字段(与1中相同)。

  4. 我的代码(根据位置添加联系人)

    Sub GetAllGALMembers()
    
    Dim olApp As Outlook.Application
    Dim olNS As Outlook.NameSpace
    Dim olGAL As Outlook.AddressList
    Dim olEntry As Outlook.AddressEntries
    Dim olMember As Outlook.AddressEntry
    Dim objItem As Outlook.ContactItem
    
    Dim myContacts As Outlook.MAPIFolder
    Dim myFolder As MAPIFolder
    Dim myItems As Items
    
    Set mySession = New Outlook.Application
    Set myNS = mySession.GetNamespace("MAPI")
    Set myContacts = myNS.GetDefaultFolder(olFolderContacts)
    Set myFolder = myContacts.Folders("Prague")
    Set myItems = myFolder.Items
    
    Set olApp = Outlook.Application
    Set olNS = olApp.GetNamespace("MAPI")
    Set olGAL = olNS.GetGlobalAddressList()
    
    Set olEntry = olGAL.AddressEntries
    On Error Resume Next
    ' loop through dist list and extract members
    
    Dim i As Long
    
    For i = 1 To olEntry.Count
    
      Set olMember = olEntry.Item(i)
    
      If olMember.AddressEntryUserType = olExchangeUserAddressEntry Then
    
        strLocation = olMember.GetExchangeUser.OfficeLocation
    
        If strLocation = "PRG" Then
    
          Set objItem = olApp.CreateItem(olContactItem)
    
          With objItem
    
           .firstName = olMember.GetExchangeUser.firstName
           .Last = olMember.GetExchangeUser.lastName
           .FullName = olMember.GetExchangeUser.Name
           .Email1Address = olMember.GetExchangeUser.PrimarySmtpAddress
           .BusinessTelephoneNumber = olMember.GetExchangeUser.BusinessTelephoneNumber
           .MobileTelephoneNumber = olMember.GetExchangeUser.MobileTelephoneNumber
           .CompanyName = olMember.GetExchangeUser.CompanyName
           .Email2DisplayName = olMember.GetExchangeUser.DisplayType
    
           .Save
    
          End With
    
        End If
    
      End If
    
    Next i
    
    End Sub
    

1 个答案:

答案 0 :(得分:0)

从另一方面看,将您的联系人列表中的条目与GAL https://msdn.microsoft.com/en-us/library/office/ff869448.aspx匹配。

Set myAddressEntry = myAddressList.AddressEntries(index)

这也接受一个字符串,所以代替索引传递你在(显示)名称中看到的字符串,以便在没有匹配时返回匹配或关闭条目。