Listar o nome e a localização do escritório de cada gerente pertencente a uma lista de distribuição do Exchange

Este tópico descreve como permitir que um usuário selecione uma lista de distribuição do Exchange e exiba o nome e o local do escritório de cada membro que é um gerente pertencente a essa lista de distribuição. As etapas principais desse procedimento são as seguintes:

  1. O exemplo de código abaixo exibe uma caixa de diálogo Selecionar Lista de Distribuição para o usuário selecionar uma lista de distribuição.

    Ele usa o objeto SelectNamesDialog para exibir a caixa de diálogo e obter a seleção do usuário. Em seguida, o exemplo obtém a seleção do usuário por meio da propriedade SelectNamesDialog.Recipients .

  2. Para cada membro na lista de distribuição selecionada:

    1. Se o membro for um gerente, o exemplo de código exibirá o nome e o telefone do escritório do gerente.

    Cada membro na lista de distribuição é um objeto AddressEntry . Ao verificar se o AddressEntry.AddressEntryUserType é olExchangeUserAddressEntry ou olExchangeRemoteUserAddressEntry, o exemplo atribui o objeto AddressEntry a um objeto ExchangeUser e usa ExchangeUser.GetDirectReports.Count >0 como critério para determinar se o usuário é um gerenciador. Em seguida, ele exibe as propriedades Nome e OfficeLocation do objeto ExchangeUser .

  3. Se o membro for uma lista de distribuição, o exemplo de código chamará a sub-rotina EnumerateDLManagers. Para cada membro na lista de distribuição, caso seja um gerente, o exemplo de código exibirá seu nome e seu telefone do escritório.

Copie o exemplo de código Visual Basic for Applications a seguir para o Editor do Visual Basic e execute ShowManagersOfGroups. Observe que esse código de exemplo aplica-se somente a uma lista de distribuição que possui apenas usuários do Exchange como membros, ou que possui listas de distribuição do Exchange como membros, mas todos os membros desta terão que ser usuários do Exchange. Será necessário personalizar mais o código se houver mais aninhamentos de listas de distribuição como membros.

Sub ShowManagersOfGroups() 
    Dim oRecip As Outlook.Recipient 
    Dim oSND As Outlook.SelectNamesDialog 
    Dim oAE As Outlook.AddressEntry 
    Dim oAEs As Outlook.AddressEntries 
    Dim oEU As Outlook.ExchangeUser 
    Dim oDL As Outlook.ExchangeDistributionList 
    Dim oLists As Outlook.AddressLists 
    Dim oList As Outlook.AddressList 
    Set oLists = Application.Session.AddressLists 
    For Each oList In oLists 
        If oList.Name = "All Groups" Then 
            Exit For 
        End If 
    Next 
    Set oSND = Application.Session.GetSelectNamesDialog 
    With oSND 
        .NumberOfRecipientSelectors = olShowTo 
        .InitialAddressList = oList 
        .Caption = "Select Distribution List" 
        .ToLabel = "D/L" 
        .ShowOnlyInitialAddressList = True 
        .AllowMultipleSelection = False 
        .Display 
    End With 
    For Each oRecip In oSND.Recipients 
        If oRecip.AddressEntry.AddressEntryUserType = _ 
            olExchangeDistributionListAddressEntry Then 
            Set oDL = oRecip.AddressEntry.GetExchangeDistributionList 
            Set oAEs = oDL.GetExchangeDistributionListMembers 
            For Each oAE In oAEs 
                If oAE.AddressEntryUserType = olExchangeUserAddressEntry _ 
                    Or oAE.AddressEntryUserType = olExchangeRemoteUserAddressEntry Then 
                    Set oEU = oAE.GetExchangeUser 
                    If oEU.GetDirectReports.Count Then 
                        Debug.Print oEU.Name, oEU.OfficeLocation 
                    End If 
                ElseIf oAE.AddressEntryUserType = _ 
                    olExchangeDistributionListAddressEntry Then 
                    EnumerateDLManagers oAE 
                End If 
            Next 
        End If 
    Next 
End Sub 
 
Sub EnumerateDLManagers(oAddress As AddressEntry) 
    Dim oAE As Outlook.AddressEntry 
    Dim oAEs As Outlook.AddressEntries 
    Dim oEU As Outlook.ExchangeUser 
    Dim oDL As Outlook.ExchangeDistributionList 
     
    Set oDL = oAddress.GetExchangeDistributionList 
    Set oAEs = oDL.GetExchangeDistributionListMembers 
    For Each oAE In oAEs 
        If oAE.AddressEntryUserType = olExchangeUserAddressEntry _ 
            Or oAE.AddressEntryUserType = olExchangeRemoteUserAddressEntry Then 
            Set oEU = oAE.GetExchangeUser 
            If oEU.GetDirectReports.Count Then 
                Debug.Print oEU.Name, oEU.OfficeLocation 
            End If 
        End If 
    Next 
End Sub

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.