VBA Tools

Aktualizacja adresów w Listach dystrybucyjnych

napisane przez Oskar w dniu czwartek, 21 Kwiecień, 2011, w kategorii Porady - Outlook

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.

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)
Sub Aaktualizuj_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.

Podziel się ze znajomymi:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Blip
  • Grono
  • Gwar
  • Kciuk.pl
  • LinkedIn
  • MySpace
  • OSnews.pl
  • Śledzik
  • Spis.pl
  • Technorati
  • Twitter
  • Vala.pl
  • Wahacz.pl
  • Wykop

Wpisz swój komentarz:

Comment Spam Protection by WP-SpamFree