Retrieve Distribution Lists from a List of Outlook Names
This is a variation of the macro produced for question ID 27974272.
In that macro (see below), you enter several distribution lists in a spreadsheet and the output on the spreadsheet page is Member Names with the distribution lists.
For this macro, the Outlook Object Library has to be chosen with VBA, Tools, References.
In this new macro, I would like to be able to enter Member Names and have their distribution lists with the original member names produced.
Sub GetDistributionListMembers()Set objOutlook = CreateObject("Outlook.Application")Set objNamespace = objOutlook.GetNamespace("MAPI") Dim addrLists As AddressLists Set addrLists = objNamespace.Session.AddressLists Dim addrList As AddressList For Each addrList In addrLists If addrList.Name = "All Groups" Then Set myAddrList = addrList Exit For End If NextidxLine = 1ActiveSheet.Range("A1") = "Chosen Dist List"ActiveSheet.Range("C1") = "Member name"ActiveSheet.Range("D1") = "Dist List"For Each Entry In myAddrList.AddressEntries If Entry.DisplayType = olDistList Then For Each c In Range("Chosen_Dist_List") If c.Value = Entry.Name Then For Each Mem In Entry.Members If Mem.DisplayType = olUser Or Mem.DisplayType = olRemoteUser Then ActiveSheet.Range("C" & idxLine + 1) = Mem.Name ActiveSheet.Range("D" & idxLine + 1) = Entry.Name idxLine = idxLine + 1 End If Next End If Next End IfNextEnd Sub
Sub GetMemberDistributionLists() Set objOutlook = CreateObject("Outlook.Application") Set objNamespace = objOutlook.GetNamespace("MAPI") Dim addrLists As AddressLists Set addrLists = objNamespace.Session.AddressLists Dim addrList As AddressList For Each addrList In addrLists If addrList.Name = "All Groups" Then Set myAddrList = addrList Exit For End If Next idxLine = 1 ActiveSheet.Range("A1") = "Chosen Members" ActiveSheet.Range("C1") = "Member name" ActiveSheet.Range("D1") = "Dist List" For Each entry In myAddrList.AddressEntries If entry.DisplayType = olDistList Then For Each mem In entry.Members For Each c In Range("Chosen_Member_Names") If (mem.DisplayType = olUser Or mem.DisplayType = olRemoteUser) _ And c.Value = mem.Name Then ActiveSheet.Range("C" & idxLine + 1) = mem.Name ActiveSheet.Range("D" & idxLine + 1) = entry.Name idxLine = idxLine + 1 End If Next Next End If NextEnd Sub
Thanks for the quick response time, but when I run it I get:
Run-time error '1004':
Method 'Range' of object '_Global' failed.
-----------------------------------------------------------
When I choose debug, the following line is highlighted:
For Each c In Range("Chosen_Member_Names")
tdlewis
Sorry. I should have mentioned something about that. Your other subroutine relied on the named range "Chosen_Dist_List"; I wrote the new subroutine to use the named range "Chosen_Member_Names".
If you'd prefer another name or a different way to refer to the range where the member names are located, the line that's failing can easily be tweaked accordingly.
I have attached the spreadsheet that was used for the Getting the People for Lists.
Could you tweak it so it would work with your code for Getting the Lists for People.
The first tab and macro works, but I get an error with the second one.
The error is:
Run-time error
'-590331899 (dcd04005)':
When I choose debug, I get "For Each mem In entry.Members" highlighted.
idxLine = 1
For Each entry In myAddrList.AddressEntries
If entry.DisplayType = desiredType Then
For Each mem In entry.Members
If (mem.DisplayType = olUser Or mem.DisplayType = olRemoteUser) Then
For Each c In Range(namedRangeMembers)
If c.Value = mem.Name Then
ActiveSheet.Range("C" & idxLine + 1) = mem.Name
ActiveSheet.Range("D" & idxLine + 1) = entry.Name
idxLine = idxLine + 1
End If
Next
End If
Next
End If
Next
End Sub GetMembersAndLists.xlsm
I think the problems may be time-outs or lock-outs from the network.
Since it is large corporate environment, I may have to go to the administrators for the information. Thanks for the efforts. I will give you the points.
Double-checked. Yes, I do have them (see first image below)
I still get the error messages.
The first macro GetDistributionListMembers gets a result for one list in 15 seconds.
Then, at 30 seconds there is the message:
Outlook is trying retrieve data from the Microsoft Exchange Server Outlook.xxx.xxx
Alex Campbell
ASKER
Due to corporate restrictions, I was not able to get the information I was looking for, but the macro appears to be written properly.
Try adding "On Error Resume Next" before the operations that are failing. That won't get you around the corporate restrictions, but it might allow you to generate the report for those distribution lists you are allowed to see.
Open in new window