Microsoft Outlook troubleshooting
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.

Aktualizacja kontaktów listy w Outlooku
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.

MVP Shon Oskar – VBATools.pl
Jeśli masz pytania dot. tego artykułu zapraszam na Forum
Skonfiguruj swój pakiet dodatków do Excela, Worda, PowerPointa i Outlooka



© Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.