MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 27.11.2017, 08:52   #1
Marco_Müller
Neuer Benutzer
Neuer Benutzer
Standard VBA - Verteiler in Globalem Adressbuch in Excel auslesen

Hallo zusammen,

ich möchte in Excel eine Liste anlegen, in der alle Mitarbeiter der Abteilung, sowie deren E-Mail, aufgeführt sind und die auch immer aktuell ist.
Hierfür würde ich gerne die Mitglieder im Verteiler der Abteilung im globalen Adressbuch auslesen, da dieser immer aktuell ist.
Anschließend würde ich die Namen und die dazugehörige E-Mail Adresse in das Tabellenblatt "Mitarbeiter" schreiben.

Ich hoffe mir kann jemand helfen, da ich schier am verzweifeln bin

Danke schon mal im Voraus!
Marco_Müller ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 27.11.2017, 09:28   #2
Luschi
MOF Koryphäe
MOF Koryphäe
Standard

Hallo

warum googelst Du nicht mit den Stichworten: vba outlook globales adressbuch auslesen
Ergebnis: Ungefähr 11.200 Ergebnisse (0,42 Sekunden)
Da findest Du doch was Passendes und probiere es aus!
Wenn Du dann noch Fragen hast zu dem Code, dann helfen wir auch, aber ohne eigene Anstrengeungen wird das nichts.

Gruß von Luschi
aus klein-Paris
Luschi ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 27.11.2017, 13:47   #3
Marco_Müller
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Luschi,

ich habe es bereits geschafft, das globale Adressbuch auszulesen und auch nach der Abteilung zu Filtern. Jedoch sind es so viele Einträge, das der Vorgang ewig dauert (Nach 10 Minuten war ich noch nicht einmal beim Buchstabe C). Daher habe ich überlegt ich Suche im Adressbuch nur den Verteiler der Abteilung und lese daraus dann alle Mitglieder aus. Jedoch bin ich an diesem Punkt gescheitert.

Mein bisheriger, "funktionierender" Code zum auslesen des Adressbuches und Filtern nach der Abteilung sieht folgender maßen aus:

Code:

Public Sub Adressen()
   Dim Outl As Outlook.Application
   Dim OutNms As Outlook.Namespace
   Dim NamensListe As Outlook.AddressList
   Dim OutRcpts As Outlook.AddressEntries
   Dim Eintrag As Outlook.AddressEntry
   
   Set Outl = CreateObject("Outlook.Application")
   Set OutNms = Outl.GetNamespace("MAPI")
   Set NamensListe = Outl.Session.AddressLists(8)
   Set OutRcpts = NamensListe.AddressEntries
   
   
   Dim Zähler As Integer
            For Each Eintrag In OutRcpts
                If (Eintrag.GetExchangeUser().Department) = "PP/PTU" Then
                         Zähler = Zähler + 1
                         Cells(Zähler, 1) = Eintrag.Name

                End If
               
            Next Eintrag
    
    
    Set Outl = Nothing
    Set OutNms = Nothing
    Set NamensListe = Nothing
    Set OutRcpts = Nothing
    
End Sub
Ich bin natürlich auch für jede andere Lösung offen, die nicht 3 Stunden Rechnerleistung erfordert.

Vielleicht funktioniert es so auch und ich habe es nur unnötig kompliziert programmiert. Bin nicht so der VBA Profi und wäre super, wenn mir jemand helfen könnte.
Marco_Müller ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 27.11.2017, 15:06   #4
Storax
MOF Koryphäe
MOF Koryphäe
Standard

Du liest anscheinend die komplette Adressliste durch, das kann dauern und hat nichts mit Rechengeschwindigkeit Deines PCs zu tun.
Was ergibt
Code:

debug.print  OutRcpts.count
bei Dir?

Ansonsten, wenn es um die E-Mail Adressen der Mitarbeiter in der Abteilung geht, ist vielleicht der umgekehrte Weg besser. Soll heissen, Du startest mit der Namensliste der Mitarbeiter (vorausgesetzt Du hast sie) und liest dazu die E-Mail Adresse. Das ist hier beschrieben. Angespasst würde der Code grob so aussehen
Code:

Sub GetSMTPAddressForResolvedName()
' https://msdn.microsoft.com/en-us/VBA/Outlook-VBA/articles/obtain-the-e-mail-address-of-a-recipient
    Dim olA  As Outlook.Application
    Dim olNS As Outlook.Namespace
    Dim olRecip As Outlook.Recipient
    Dim pa As Outlook.PropertyAccessor
    Dim recipientName As String
    recipientName = "John Doe"
    
    Const PR_SMTP_ADDRESS As String = _
        "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"

    Set olA = New Outlook.Application
    Set olNS = olA.GetNamespace("MAPI")
    Set olRecip = olNS.CreateRecipient(recipientName)
    olRecip.Resolve
    If olRecip.Resolved Then
        Set pa = olRecip.PropertyAccessor
        Debug.Print olRecip.Name, " SMTP=", pa.GetProperty(PR_SMTP_ADDRESS)
    End If
        
End Sub
Ansonsten, hier geht es zur VBA Doku für Outlook. Und falls Du eine Lösung hast, bitte Rückmeldung geben. Eine performante Lösung würde mich auch interessieren.

__________________

This isn't a code writing service, you need to do some research and have a go at writing some of your own code.
Be careful, content may contain traces of irony.
Storax ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.11.2017, 07:27   #5
Marco_Müller
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Ja ich weis das ich mit der aktuellen Lösung das komplette Adressbuch einmal durchschaue...

Über eine Namensliste möchte ich vermeiden, da der Pflegeaufwand so gering wie möglich sein sollte und doch ziemlich oft neue Mitarbeiter, Praktikanten,... in die Abteilung kommen oder sie verlassen. Sonst könnte ich es gleich komplett manuell eintragen jedes mal.

Ist es nicht einfach möglich, in dem Adressbuch nach dem Verteiler zu suchen (z.B. AbteilungXYZ) und anschließend die Mitglieder dieses Verteilers auszugeben? Müsste doch meiner Meinung nach die einfachste und auch schnellste Methode sein oder ?
Marco_Müller ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.11.2017, 07:46   #6
Storax
MOF Koryphäe
MOF Koryphäe
Standard

Klar, man kann eine Verteilerliste ähnlich wie das komplette Adressbuch durchlesen. Und das dürfte sicher schneller sein.
Google hilft da weiter bzw. die Doku. (Link hast Du ja)
Wer aber pflegt die Verteilerliste, denn wenn die nicht aktuell ist, bringt Dir das nichts.

__________________

This isn't a code writing service, you need to do some research and have a go at writing some of your own code.
Be careful, content may contain traces of irony.
Storax ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.11.2017, 14:14   #7
Marco_Müller
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Die Verteiler in der Globalen Adressliste werden regelmäßig vom Sekretariat aktualisiert, da sie auch wissen wie viele und wer alles neu in der Abteilung ist oder geht.

Nun habe ich folgende Möglichkeit gefunden, einen Verteiler aus den Kontakten auszulesen, jedoch bekomm ich es einfach nicht hin, dass er im Globalen Adressbuch und nicht bei eigene Kontakte sucht...

Code:

Public Sub Verteiler()
   Dim oOL As Object
   Dim oEntry As Outlook.Recipient
   Dim oGroup As Object
   Dim oFolder As Outlook.MAPIFolder
   Dim objNameSpace As Outlook.Namespace
   Dim objDistList As Outlook.DistListItem
   Dim i As Integer
    
   Set oOL = CreateObject("Outlook.Application")
   Set objNameSpace = oOL.GetNamespace("MAPI")
   Set oFolder = objNameSpace.GetDefaultFolder(olFolderContacts)
   Set objDistList = oFolder.Items("PP/PTU")
   
   
   For i = 1 To objDistList.MemberCount
        Set oEntry = objDistList.GetMember(i)
        Cells(i, 1) = oEntry.Name
   Next
End Sub
wahrscheinlich stehe ich einfach nur ziemlich auf dem Schlauch gerade und es gibt eine ganz einfache Möglichkeit, wie ich das Globale Adressbuch hier verwende...
Marco_Müller ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.11.2017, 15:15   #8
Storax
MOF Koryphäe
MOF Koryphäe
Standard

Google liefert das z.B.

Umgeschrieben auf VBA funktioniert das bei mir
Code:

Private Sub GetDistributionListMembers()
    Dim snd As Outlook.SelectNamesDialog
    Dim addrLists As Outlook.AddressLists
    Dim addrEntry As Outlook.AddressEntry
    Dim exchDL As Outlook.ExchangeDistributionList
    Dim addrEntries As Outlook.AddressEntries
    Dim exchDLMember As Outlook.AddressEntry
    
        Set snd = Outlook.Session.GetSelectNamesDialog
        Set addrLists = Outlook.Session.AddressLists
    Dim addrList As Outlook.AddressList
    
    For Each addrList In addrLists
        If addrList.Name = "All Groups" Then
            snd.InitialAddressList = addrList
            Exit For
        End If
    Next
    snd.NumberOfRecipientSelectors = _
        Outlook.OlRecipientSelectors.olShowTo
    snd.ToLabel = "D/L"
    snd.ShowOnlyInitialAddressList = True
    snd.AllowMultipleSelection = False
    snd.Display
    If (snd.Recipients.Count > 0) Then
        Set addrEntry = snd.Recipients(1).AddressEntry
        If (addrEntry.AddressEntryUserType = _
            Outlook.OlAddressEntryUserType. _
            olExchangeDistributionListAddressEntry) Then
            Set exchDL = addrEntry.GetExchangeDistributionList()
             Set addrEntries = exchDL.GetExchangeDistributionListMembers()
            If Not (addrEntries Is Nothing) Then
                For Each exchDLMember In addrEntries
                    Debug.Print (exchDLMember.Name)
                Next
            End If
         End If
    End If
End Sub

__________________

This isn't a code writing service, you need to do some research and have a go at writing some of your own code.
Be careful, content may contain traces of irony.
Storax ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.12.2017, 10:40   #9
Marco_Müller
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hi,

sorry das ich mich jetzt erst wieder melde.

könntest du mir das Programm vielleicht etwas Kommentieren?
Hab wie gesagt noch nicht so viel mit VBA gemacht und irgendwie läuft es bei mir nicht.
Nutze Office 2010 falls das ein unterschied macht.
Marco_Müller ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:16 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.