VBATools

Aktualizacja adresów w Listach dystrybucyjnych

by on Apr.21, 2011, under Outlook, Porady

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 po przez 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(adres As String) As String
'MVP OShon from VATools.pl
 Dim oItems As Items, oContact As ContactItem
 Dim oContactFolder As MAPIFolder
 Set oContactFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts)
 Set oItems = oContactFolder.Items
 Set oContact = oItems.Find("[FullName] =" & """" & adres & """" & "")
 FindAContact = oContact.EntryID  '.Email1Address 'może być adres
 Set oContact = Nothing
 Set oContactFolder = Nothing
 Set 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.

OL_Aktualizacja_ListyDystrybucyjnej

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 odpalenie jej z poziomu folderu kontaktów Outlooka, w którym znajdują się listy dystrybucyjne.

Option Explicit
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
SubAaktualizuj_listy_dystryb()
 'MVP OShon form VBATools.pl
 Dim item As Object, oDistList As DistListItem
 Dim oFolder As MAPIFolder, WshShell, winexist As Boolean
 Set oFolder = Application.ActiveExplorer.CurrentFolder
 For Each item In oFolder.Items
 DoEvents
 If item.Class = 69 Then
 Set oDistList = item
 oDistList.Display

 Set 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
 Set WshShell = Nothing
 Set oDistList = Nothing
 Set oFolder = Nothing
End Sub

Procedura sprawdzona dla 2007/10 (PL)

Dla innych wersji językowych oraz wersji aplikacji przełączniki SendKeys mogą ulec zmianie.

(c) 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.

:, , ,

Leave a Reply

Recently Active Members

Profile picture of vbatools
Profile picture of Karol Stilger
Profile picture of marcinmachalowski
Profile picture of Joanna Subik
Profile picture of Anorak
Profile picture of programistaaccess
Profile picture of piotrpawlik
Profile picture of Emil Wasilewski
Profile picture of kicekpicek
Profile picture of coldfusion
Profile picture of Gosia Borzęcka
Profile picture of lukaszch
Profile picture of itadministracja
Profile picture of farbenia
Profile picture of Łukasz Kałużny
Profile picture of kabzinski
Profile picture of rtynski
Profile picture of leszekbetlinski
Profile picture of Iv
Profile picture of Justyna Spychała