How to Update Contacts in Distribution Lists
Outlook allows the user to create an object consisting of a group of contacts. This type of object, called a distribution list, has a unique set of features. One of those lets you update contacts that were earlier added to the group list by selecting them in the address book.
Such contacts can evolve, but unfortunately they are not permanently tied with the distribution list. This means that changing contact information and sending a message to a distribution list will not cause the intended effect. Unless the contact was deleted and replaced by an (almost) identical one, it should have a reference number partially consistent with the contact chosen in the list building phase.
e.g. contact has the number: “000000003921EFB12C34994594C86EC4DE706AB084092200”
and based on it, a contact attached to a distribution list has the number:
“00000000C091ADD3519DCF11A4A900AA0047FAA4C3000000003921EFB12C34994594C86EC4DE706AB084092200”
It would seem that, to get the new contact address and replace it simultaneously updating the list member, all one needs to do is refer to the 48 characters of every contact in the list.
Sub contact_data_request()
Debug.Print(FindAContact("Surname Name"))
Debug.Print(Application.GetNamespace("MAPI").GetItemFromID("000000003921EFB12C34994594C86EC4DE706AB084092200"))
End Sub
Function FindAContact(ByVal adres As String) As String
Dim oItems As Items, oContact As ContactItem
Dim oContactFolder As MAPIFolder
oContactFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts)
oItems = oContactFolder.Items
oContact = oItems.Find("[FullName] =" & """" & address & """" & "")
FindAContact = oContact.EntryID '.Email1Address 'can be an address
oContact = Nothing
oContactFolder = Nothing
oItems = Nothing
End Function
Unfortunately the manufacturer left the parameter oDistList.GetMember(nIndex) .AddressEntry “to be read”. Moreover, the user can change not only the contact address, but also its name. In this case the above code (if working) would return an error. It can be argued that Microsoft left this feature unavailable for the user, because one cannot refer to any of the available parameters of a group member.
http://outlooktalk.com/article/upload/472.jpg
Fig.1. Contact list update in Outlook 2007
To get around this problem one can apply automatic clicking method (as by the user).
To achieve this the below provided procedure needs to be embedded in the Outlook developer module [Alt+F11], and then activated from the level of the Outlook contacts folder, where the distribution lists are stored.
Sub distribution_list_update()
'Created by OShon 2011-04-22 VBATools.pl
Dim item As Object, oDistList As DistListItem
Dim oFolder As MAPIFolder, WshShell, winexist As Boolean
oFolder = Application.ActiveExplorer.CurrentFolder
For Each item In oFolder.Items
DoEvents()
If item.Class = 69 Then
oDistList = item
oDistList.Display()
WshShell = CreateObject("WScript.Shell")
Do While winexist = False
winexist = WshShell.AppActivate(oDistList.DLName)
Loop
Select Case Val(Application.Version)
Case 12 'for Outlook 2007
Sleep(100) : SendKeys("%RU")
Sleep(100) : SendKeys("%RSS")
Case 14 'for Outlook 2010
Sleep(100) : SendKeys("%TU")
Sleep(100) : SendKeys("%TSS")
End Select
End If
Next
WshShell = Nothing
oDistList = Nothing
oFolder = Nothing
End Sub
Procedure was successfully tested for Outlook 2007 and Outlook 2010.
If you are not experienced in macro installation in Microsoft Outlook, please refer to the article Installation and running macros
(c) Shon Oskar
© All rights reserved. No part or whole of this article may not be reproduced or published without prior permission.
Oryginal article publicate at this page