
Aktualizacja adresów w Listach dystrybucyjnych
autor OShon 2011-05-06 15:08:00 w Makra
tagi: kontakty, Outlook, dystrybucyjna, adresy, lista, aktualizacja
0 komenarze | Dodaj komentarz
tagi: kontakty, Outlook, dystrybucyjna, adresy, lista, aktualizacja
0 komenarze | Dodaj komentarz
Outlook pozwala użytkownikowi na stworzenie obiektu składającego się z grupy kontaktów. Lista dystrybucyjna, bo o niej mowa ma specyficzne właściwości. Jedną z nich, jest możliwość aktualizacji kontaktów, które wcześniej zostały dodane do grupy listy poprzez wskazanie ich w książce adresowej.
Adresy takie mogą ewaluować, ale niestety nie są one związane z lista dystrybucyjną “na stałe”. Znaczy to, że zmiana danych w kontaktach i wysyłka wiadomości do grupy adresowej “Listy dystrybucyjnej” nie będzie realizowało zamierzonego celu (prawidłowej wysyłki). O ile kontakt nie został usunięty i na jego miejsce nie powstał (prawie) identyczny kontakt to posiada on swój numer referencyjny w pewnej części zgodny z kontaktem wybranym w fazie budowania listy.
np: kontakt posiada nr.: “000000003921EFB12C34994594C86EC4DE706AB084092200”
a na jego podstawie kontakt załączony w liście dystrybucyjnej posiada nr.:
“00000000C091ADD3519DCF11A4A900AA0047FAA4C3000000003921EFB12C34994594C86EC4DE706AB084092200”
Można by przypuszczać, że wystarczy odwołać się do 48 znaków każdego z kontaktów listy aby pobrać nowy adres kontaktu i podmienić go aktualizując członka listy.
Sub pobranie_danych_kontaktu()
Debug.Print(FindAContact("Nazwisko Imie"))
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] =" & """" & adres & """" & "")
FindAContact = oContact.EntryID '.Email1Address 'może być adres
oContact = Nothing
oContactFolder = Nothing
oItems = Nothing
End Function
Niestety, producent pozostawił parametr oDistList.GetMember(nIndex) .AddressEntry “do odczytu”. Co więcej, użytkownik może zmienić nie tylko adres kontaktu, ale i jego nazwę. W tym przypadku pow. kod (o ile by działał) zwracałby błąd. Można by stwierdzić, iż Microsoft pozostawił sobie tą funkcję niedostępną dla użytkownika, ponieważ nie można się odwołać do żadnego z dostępnych parametrów członka grupy.

Rys.1. Aktualizacja kontaktów listy w Outlooku 2007 PL.
Aby można było się uporać z problemem, można zastosować metodę automatycznego klikania (analogicznie jak przez użytkownika).
W tym celu należy poniżej przytoczoną procedurę osadzić w module developera Outlooka [Alt+F11], a następnie uruchomienie jej z poziomu folderu kontaktów Outlooka, w którym znajdują się listy dystrybucyjne.
Sub Aaktualizuj_listy_dystryb()
'Napisano przez OShon 2011-04-22 VABTools.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 'dla wersji 2007 PL
Sleep(100) : SendKeys("%RU")
Sleep(100) : SendKeys("%RSS")
Case 14 'dla wersji 2010 PL
Sleep(100) : SendKeys("%TU")
Sleep(100) : SendKeys("%TSS")
End Select
End If
Next
WshShell = Nothing
oDistList = Nothing
oFolder = Nothing
End Sub
Procedura sprawdzona dla 2007PL oraz 2010PL.
Dla innych wersji językowych oraz wersji aplikacji przełączniki SendKeys mogą ulec zmianie.
Osadzenie procedury można znaleźć w artykule: Instalacja i uruchamianie makr.
Shon Oskar – www.VBATools.pl
© Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.
