ID tematu: 26680
 |
Dane z listy globalnej kontaktów Outlook do Excela |
| Autor |
Wiadomość |
Matuzam
EXCELent Man

Pomógł: 20 razy Posty: 102
|
Wysłany: 2011-12-16, 17:35 Dane z listy globalnej kontaktów Outlook do Excela
|
|
|
Mam w excelu listę z nazwiskami i imionami pracowników. chciałbym odpowiednie dane pobrać z właściwości kontaktu z Outlooka (Globalna Lista Adresów, MS Exchange). Część danych z karty Ogólne, część z Telefon. Jakby ktoś mi jakiś szkielet mógł podać, bo poza stworzeniem obiektu Outlook.Application i LogOn, a potem pętli obiektowej po komórkach z danymi to nie wiem jak to ugryźć.
PS. Pierwsze próby współpracy z Outlookiem, jeśli podałem za mało lub nie podałem istotnych info to z góry przepraszam. |
|
 | ID posta:
141094
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
OShon
Excel Expert


Zaproszone osoby: 41
Pomógł: 620 razy Posty: 2037
|
|
 | ID posta:
141136
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
Matuzam
EXCELent Man

Pomógł: 20 razy Posty: 102
|
Wysłany: 2011-12-18, 05:00
|
|
|
Z Outlooka do Excela.
Może dokładniej opiszę jakby to wyglądało manualnie....
Wyszukuje po imieniu i nazwisku w książce adresowej Outlooka, przepisuję kilka informacji z właściwości kontaktu (Stanowisko, Dział Firmy, Nr telefonu, Nr telefonu służbowego) i przerzucam do kolejnych kolumn w Excelu. I tak 500 razy, więc z oczywistych względów chcę to zautomatyzować.
Wyszukuje informacje w Globalnej Liście Adresów, połączenie z serwerem MS Exchange (nie wiem czy to w ogóle istotne). Czasem mam dokładnie dopasowane nazwy, czasem brak części informacji. ALe przy użyciu przyciusku "sprawdź poprawność adresatów" (nie pamiętam dokładnie, standardowa przycisk przy tworzeniu nowej wiadomości) wszystkich wyszukuje bez wielokrotnych dopasowań.
A tak na marginesie... Excela uczyłem się nagrywając większość rzeczy i w t en sposób opanowują komendy w VBA. Tutaj takiej opcji nie ma. Możecie polecić jakiś kurs online lub książka, najlepiej uwzględniająca makra w outlooku jak i wykorzystanie outlooka przy makrach Excelowskich? |
|
 | ID posta:
141243
|
|
|
 |
OShon
Excel Expert


Zaproszone osoby: 41
Pomógł: 620 razy Posty: 2037
|
Wysłany: 2011-12-18, 11:14
|
|
|
Czyli chcesz adresy zawarte w książce dresowej przenieść do Excela.
Wg jakiejś listy zapisanej w Excelu, aby je dopasować, skąd te adresy masz pobrać?
czy całość adresów widocznych w danych folderze chcesz przenieść na arkusz?
może chcesz zaznaczyć kilka adresatów z książki adresowej (np wg grupy) i je przenieść?
Pytam bo twoja odpowiedź jest mało precyzyjna a możliwości mnóstwo. |
_________________ MVP Office System, moderator Outlook.pl|WSS.pl|CodeGuru.pl, praca: Business Developer, blog: VBATools |
|
 | ID posta:
141251
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
Matuzam
EXCELent Man

Pomógł: 20 razy Posty: 102
|
Wysłany: 2011-12-18, 15:02
|
|
|
| OShon napisał/a: | | Czyli chcesz adresy zawarte w książce dresowej przenieść do Excela. | Nie adresy, tylko wybrane pozycje z właściwości kontaktów. Pisałem w poprzednich postach. | OShon napisał/a: | | skąd te adresy masz pobrać? | Z Globalnej Listy Adresów, połączenie z serwerem MS Exchange. Nie wiem co więcej mam napisać, jeśli potrzeba innych szczegółów to proszę o precyzyjniejsze pytanie. Moja znajomość Outlooka ogranicza się do ustawiania prostych reguł... | OShon napisał/a: | | czy całość adresów widocznych w danych folderze chcesz przenieść na arkusz? | Nie mam za bardzo podziału folderów adresów w poczcie, chodzi o ogólną listę kontaktową (nie wiem jak to inaczej opisać). Na tej liście jest przynajmniej kilka (może nawet kilkanaście) tysięcy kontaktów, potrzebne mi wybrane szczegóły kilkuset. Ale jak dla mnie można wygenerować do excela wszystkie szczegóły wszystkich kontaktów - jak będę to miał w excelu to nawet wyszukaj pionowo mi wystarczy żeby wyciąć to co potrzebuję. Inna sprawa czy generowanie takiej ilości danych z Outlooka jest technicznie wykonalne. | OShon napisał/a: | | może chcesz zaznaczyć kilka adresatów z książki adresowej (np wg grupy) i je przenieść? | No i ponownie, nie adresy tylko szczegóły adresów. Ręcznie chyba nie da się inaczej jak Narzędzia -> Książa Adresowa -> Właściwości kontaktu i ręczne spisanie potrzebnych mi danych. No chyba, że generacja vcarda i stamtąd branie danych, ale w kontekście ręcznej pracy to raczej utrudnienie. |
|
 | ID posta:
141270
|
|
|
 |
OShon
Excel Expert


Zaproszone osoby: 41
Pomógł: 620 razy Posty: 2037
|
Wysłany: 2011-12-18, 16:07
|
|
|
| Cytat: | | Nie adresy, tylko wybrane pozycje z właściwości kontaktów |
Niestety nie umiesz napisać sedna - ponieważ mając kolekcje 2000 adresów chcesz wyciągnąć 100 to co będzie elementem wyróżniającym - przypisanym do kontaktu.
Wszystko się da - ale pozostawmy to już bo chcesz śpiewać a seplenisz jak dzieciak.
Zainstaluj program do exportu danych w outlooku do pliku CSV CodeTwo Outlook Export |
_________________ MVP Office System, moderator Outlook.pl|WSS.pl|CodeGuru.pl, praca: Business Developer, blog: VBATools |
|
 | ID posta:
141285
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
Matuzam
EXCELent Man

Pomógł: 20 razy Posty: 102
|
Wysłany: 2011-12-18, 16:36
|
|
|
| Ech. Pierwsze zdanie w temacie. Mam listę imię i nazwisko i to jest jedyny wyznacznik. żadnego innego nie ma. instalacja czegokolwiek odpada... a informacje, które chcę wyciągnąć to stanowisko, dział i wszystkie nr telefonów, które są podane. |
|
 | ID posta:
141289
|
|
|
 |
OShon
Excel Expert


Zaproszone osoby: 41
Pomógł: 620 razy Posty: 2037
|
Wysłany: 2011-12-19, 10:10
|
|
|
Aby dopełnić to pow. zdanie to listę Imię Nazwisko masz razem - czy osobno (osobno imię osobno nazwisko)
Zapisane gdzie - w pliku XLS w komórkach, w pliku TXT (jak linia pod linią, czy z kwantyfikatorem) czy w bazie (jakiej bazie).
To są kluczowe informacje aby na tym oprzeć meritum kodu. Nie dziw się pytaniom bo założyłeś że to co masz przed oczyma będzie widział każdy. Co innego jak być załączył skrawek informacji poparte plikiem abo wyczerpująca odpowiedzią.
Program nie jest wróżką - musisz być precyzyjny. |
_________________ MVP Office System, moderator Outlook.pl|WSS.pl|CodeGuru.pl, praca: Business Developer, blog: VBATools |
|
 | ID posta:
141349
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
Matuzam
EXCELent Man

Pomógł: 20 razy Posty: 102
|
Wysłany: 2011-12-19, 10:27
|
|
|
Nie dziwię się, po prostu nie wiem co Ci jest potrzebne. A tak między bogiem a prawdą, to mogę mieć to dowolnie zapisane, w excelu w miarę umiem się poruszać o łączenie/rozdzielenie imienia i nazwiska to nie fizyka kwantowa. A teraz konkretne odpowiedzi na konkretne pytania:
W pliku *.xls, kolumna A poczynając od A2. W komórka wpisane w kolejności nazwisko i imię, czasem po nazwisku i imieniu dane firmy (w identycznej formie jak w OUTLOOKU)
A2 = Kowalski Jan
A3 = Nowak Sławomir
A4 = Brzęczyszczykiewicz Grzegorz (FIRMA ABC)
W A4 przykład dokładnej nazwy wyświetlanej (nie wiem jak dokładnie się to nazywa) z globalnej listy kontaktów. |
|
 | ID posta:
141352
|
|
|
 |
Albercik777
Excel Expert


Pomógł: 291 razy Posty: 616
|
Wysłany: 2011-12-19, 11:50
|
|
|
Matuzam, niestety muszę się zgodzić z OShonem, że nie podajesz dokładnych instrukcji.
Ale ponieważ napisałeś:
| Matuzam napisał/a: | | Jakby ktoś mi jakiś szkielet mógł podać, bo poza stworzeniem obiektu Outlook.Application i LogOn |
poniżej podaje przykładowe rozwiązanie - od Outlook 2007 (outlook references needed). W przypadku wersji 2003 - patrz wypowiedź Oshona.
| Kod: | Sub outlook_contacts()
Dim komorka As Variant
Dim zakres As Range
Dim kontakt As Object
Do
On Error Resume Next
Set zakres = Nothing
Set zakres = Application.InputBox(Prompt:="zaznacz listę osób", Title:="Zakres z kontaktwami", Type:=8)
If zakres Is Nothing Then Exit Sub
On Error GoTo 0
If zakres.Columns.Count > 1 Then _
MsgBox Prompt:="Zaznacz tylko jedną kolumnę", Title:="błąd danych", Buttons:=vbOKOnly
Loop While zakres.Columns.Count > 1
For Each komorka In zakres
On Error Resume Next
If Len(komorka) > 0 Then Set kontakt = ZnajdzDane(komorka.Value)
On Error GoTo 0
If Not kontakt Is Nothing Then
komorka.Offset(0, 1) = kontakt.JobTitle
komorka.Offset(0, 2) = kontakt.PrimarySmtpAddress
komorka.Offset(0, 3) = CStr(kontakt.BusinessTelephoneNumber)
komorka.Offset(0, 4) = CStr(kontakt.MobileTelephoneNumber)
komorka.Offset(0, 5) = kontakt.CompanyName
komorka.Offset(0, 6) = kontakt.StreetAddress & " " & kontakt.City
End If
Next komorka
End Sub
Function ZnajdzDane(nazwa As String) As AddressEntry
Dim olApp As New Outlook.Application
Dim olNSp As Outlook.Namespace
Dim oAL As Outlook.AddressList
Dim colAE As Outlook.AddressEntries
Dim oAE As Outlook.AddressEntry
Set olNSp = olApp.GetNamespace("MAPI")
Set oAL = olNSp.AddressLists("Globalna Lista Adresów")
Set colAE = oAL.AddressEntries
For Each oAE In colAE
If oAE.AddressEntryUserType = olExchangeUserAddressEntry _
Or oAE.AddressEntryUserType = olExchangeRemoteUserAddressEntry Then
If LCase(oAE.name) = LCase(nazwa) Then
Set ZnajdzDane = oAE.GetExchangeUser
Set olApp = Nothing
Exit Function
End If
End If
Next oAE
End Function |
W przypadku 2003 można jeszce wykorzystać Eksport całości książki do Excela i następnie ze swojego arkusza, gdzie wyszukujesz adresów, łaczysz się z wyeksportowanym Excelem i wyszukujesz (wszystko za pomoca makr). |
_________________ # Jeżeli istnieją 4 różne możliwości doprowadzenia programu do krachu i wszystkie 4 zablokujesz, wtedy użytkownik znajdzie piątą metodę. Edward Murphy
Pomóż nam sobie pomóc
Co to jest makro? Jak je uruchomić, do czego służy? |
|
 | ID posta:
141362
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
OShon
Excel Expert


Zaproszone osoby: 41
Pomógł: 620 razy Posty: 2037
|
Wysłany: 2011-12-19, 13:47
|
|
|
Ok skoro kolega Albercik777, podał nam jak to się robi w Exchange, to aby uzupełnić informacje ja pokażę jak to zrobić w książce adresowej Outlooka. Za wyświetlenie danych identyfikujących kontakt odpowiada parę pól - są to inne pola niż w Exchange.
Jednym z nich może być pole agregujące, nazywane potocznie "nazwą wyświetlaną" = LastNameAndFirstName. ale jest to inne pole niż LastName & " " & FirstName (tak dla utrudnienia).
Problem polega na tym że jeśli byśmy mieli do czynienia z adresem email to nie będzie w nim mowy o pomyłce (nie pasujący - będzie to inny adres).
Poniżej podaje ci kod dla lokalnej książki adresowej:
| Kod: | Sub outlook_contacts()
Dim komorka As Range, zakres As Range, x&
Set zakres = Range("a2:a" & Cells(Rows.Count, "a").End(xlUp).Row)
Dim olApp As Object 'New Outlook.Application
Set olApp = CreateObject("Outlook.Application")
Dim oFolder As Object 'Outlook.MAPIFolder
Dim oKontakt As Object 'Outlook.ContactItem
Const olFolderContacts = 10
Set oFolder = olApp.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts)
Application.ScreenUpdating = False
For Each komorka In zakres
'DoEvents 'tutaj możemy dodać info do paska postępu
For x = 1 To oFolder.Items.Count
If oFolder.Items(x).Class = 40 Then
Set oKontakt = oFolder.Items(x)
With oKontakt
'Debug.Print oKontakt.FullName
If LCase(.LastName) & " " & LCase(.FirstName) = LCase(komorka.Value) Or _
LCase(.FirstName) & " " & LCase(.LastName) = LCase(komorka.Value) Or _
LCase(.FileAs) = LCase(komorka.Value) Then
komorka.Offset(0, 1) = .JobTitle
komorka.Offset(0, 2) = .Email1Address
komorka.Offset(0, 3) = CStr(.MobileTelephoneNumber)
komorka.Offset(0, 4) = CStr(.PrimaryTelephoneNumber)
komorka.Offset(0, 5) = .CompanyName
komorka.Offset(0, 6) = .BusinessAddress
Exit For
End If
End With
End If
Next
Next komorka
Set zakres = Nothing
Set oFolder = Nothing
Set olApp = Nothing
Application.ScreenUpdating = True
Beep
End Sub |
|
_________________ MVP Office System, moderator Outlook.pl|WSS.pl|CodeGuru.pl, praca: Business Developer, blog: VBATools |
|
 | ID posta:
141369
|
|
|
 |
Albercik777
Excel Expert


Pomógł: 291 razy Posty: 616
|
Wysłany: 2011-12-20, 10:33
|
|
|
To jeszcze prześlę zmieniony/poprawiony kodzik.
W poprzednim dla każdego wyszukiwanego kontaktu przeszukiwana była książka (exchange) od początku, tym samym wielokrotne były te same kontakty.
Poniżej przykład rozwiązania z jedynokrotnym przeszukaniem danych w outlook dla wszystkich poszukiwanych danych.
Różnica w czasie wyszukiwania pomiędzy poprzednim makrem a tym poniżej powinna rosnąć wprost proporcjonalnie do ilości wyszukiwanych danych
| Kod: | Sub outlook_contacts()
Dim komorka As Variant
Dim zakres As Range
Dim kontakt As AddressEntry
Dim dane()
Dim i As Long, j As Long
Do
On Error Resume Next
Set zakres = Nothing
Set zakres = Application.InputBox(Prompt:="zaznacz listę osób", Title:="Zakres z kontaktwami", Type:=8)
If zakres Is Nothing Then Exit Sub
On Error GoTo 0
If zakres.Columns.Count > 1 Then _
MsgBox Prompt:="Zaznacz tylko jedną kolumnę", Title:="błąd danych", Buttons:=vbOKOnly
Loop While zakres.Columns.Count > 1
If Not zakres.Parent.AutoFilter Is Nothing Then
zakres.CurrentRegion.AutoFilter
End If
zakres.CurrentRegion.AutoFilter
zakres.Parent.AutoFilter.Sort.SortFields.Clear
zakres.Parent.AutoFilter.Sort.SortFields.Add Key:=zakres, SortOn:=xlSortOnValues
zakres.Parent.AutoFilter.Sort.Apply
dane = zakres
ReDim Preserve dane(1 To zakres.Rows.Count, 1 To 8)
dane = Kontaktydotablicy(dane())
Application.ScreenUpdating = False
For i = 1 To zakres.Rows.Count
For j = 1 To UBound(dane, 2) - 1
zakres.Cells(i).Offset(0, j) = dane(i, j + 1)
Next j
Next i
Application.ScreenUpdating = True
End Sub
Function Kontaktydotablicy(ByRef dane())
Dim olApp As New Outlook.Application
Dim olNSp As Outlook.Namespace
Dim oAL As Outlook.AddressList
Dim colAE As Outlook.AddressEntries
Dim oAE As Outlook.AddressEntry
Dim znajdzdane As AddressEntry
Set olNSp = olApp.GetNamespace("MAPI")
Set oAL = olNSp.AddressLists("Globalna Lista Adresów")
Set colAE = oAL.AddressEntries
Dim max As Long
Dim i As Long
i = 1
max = UBound(dane, 1)
For Each oAE In colAE
If oAE.AddressEntryUserType = olExchangeUserAddressEntry _
Or oAE.AddressEntryUserType = olExchangeRemoteUserAddressEntry Then
If StrComp(oAE.name, dane(i, 1), vbTextCompare) = 1 Then i = i + 1
If LCase(oAE.name) = LCase(dane(i, 1)) Then
Set znajdzdane = oAE.GetExchangeUser
dane(i, 2) = znajdzdane.JobTitle
dane(i, 3) = znajdzdane.PrimarySmtpAddress
dane(i, 4) = CStr(znajdzdane.BusinessTelephoneNumber)
dane(i, 5) = CStr(znajdzdane.MobileTelephoneNumber)
dane(i, 6) = znajdzdane.CompanyName
dane(i, 7) = znajdzdane.StreetAddress & " " & znajdzdane.City
dane(i, 8) = znajdzdane.Alias
i = i + 1
End If
End If
If i > max Then Exit For
Next oAE
Kontaktydotablicy = dane
Set olNSp = Nothing
Set oAL = Nothing
Set colAE = Nothing
End Function |
|
_________________ # Jeżeli istnieją 4 różne możliwości doprowadzenia programu do krachu i wszystkie 4 zablokujesz, wtedy użytkownik znajdzie piątą metodę. Edward Murphy
Pomóż nam sobie pomóc
Co to jest makro? Jak je uruchomić, do czego służy? |
|
 | ID posta:
141467
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
Matuzam
EXCELent Man

Pomógł: 20 razy Posty: 102
|
Wysłany: 2012-02-23, 06:21
|
|
|
Jako że pobierania danych z outlook powróciła, to ja odgrzebuję temat...
Przy makrze Albercik777 wyskakuje błąd: Automation Error na linii Next oAE. Ale wyskakuje w różych miejscach, przy różnych kontaktach. Przy próbie wznowienia pracy makra jest błąd: For loop not initialized.... |
|
 | ID posta:
149941
|
|
|
 |
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Dodaj temat do Ulubionych Wersja do druku
|
| |
| |