jueves, 3 de septiembre de 2015

VBA: Importando los contactos de Outlook a Excel.

Seguramente alguna vez has necesitado extraer información de tu Lista de contactos de Outlook, y hayas tenido que recurrir a la exportación en formato .xlsx desde Microsoft Outlook.
Hoy emplearemos una macro para Excel que nos permite importar la información de los contactos desde Excel.


Para ello insertamos nuestro código en un módulo estándar de nuestro proyecto de VBA desde el editor de VB...

Sub Importar_Contactos_Outlook()
'definimos las variables de Outlook como Objects.
Dim olApp As Object
Dim olNamespace As Object
Dim olFolder As Object
Dim olConItems As Object
Dim olItem As Object

'Objetos a usar de nuestro Libro de Excel
Dim wbBook As Workbook
Dim wsSheet As Worksheet
'asignamos valor a los objetos.
Set wbBook = ThisWorkbook           'nuestro libro de trabajo
Set wsSheet = wbBook.Sheets(1)      'la Hoja1 de nuestro libro será el destino de la importación

'Location in the imported contact list.
Dim filaContacto As Long

'Añadimos y formateamos la cabecera de nuestro destino...
With wsSheet
    'primero limpiamos la Hoja destino..
    .Range("A1").CurrentRegion.Clear
    'ahora añadimos la cabecera o rótulos de encabezado...
    .Cells(1, 1).Value = "Nombre de Empresa"
    .Cells(1, 2).Value = "Nombre Completo para mostrar"
    .Cells(1, 3).Value = "Dirección E-mail"
    ' y damos formato....
    With .Range("A1:C1")
        .Font.Bold = True
        .Font.Color = vbRed
        .Font.Size = 11
    End With
End With

wsSheet.Activate

'Configuramos las variables necesarias de Outlook
'empleando el IMAP (=MAPI)
'y la carpeta por defecto de outlook para los contactos...
Set olApp = CreateObject("Outlook.Application")
Set olNamespace = olApp.GetNamespace("MAPI")
Set olFolder = olNamespace.GetDefaultFolder(10)
Set olConItems = olFolder.Items
        
'Número de fila donde comenzamos a traernos los datos importados
filaContacto = 2

'For each contact: if it is a business contact, write out the business info in the Excel worksheet;
'otherwise, write out the personal info.
For Each olItem In olConItems
    If TypeName(olItem) = "ContactItem" Then
        With olItem
                Cells(filaContacto, 1).Value = .CompanyName
                Cells(filaContacto, 2).Value = .FullName
                Cells(filaContacto, 3).Value = .Email1Address
                'otras propiedades de los contactos...:
                '.HomeAddressStreet '.HomeAddressPostalCode '.HomeAddressCity
                '.BusinessAddressCity '.BusinessAddressPostalCode '.BusinessAddressCity
        End With
        'aumentamos la fila
        filaContacto = filaContacto + 1
    End If
Next olItem

'Limpiamos las variables creadas.
Set olItem = Nothing
Set olConItems = Nothing
Set olFolder = Nothing
Set olNamespace = Nothing
Set olApp = Nothing
       
'mensaje de confirmación
MsgBox "Lista importada...!!", vbInformation
    
End Sub



Tras ejecutar veremos en nuestra 'Hoja1' de Libro de trabajo el listado de los contactos de Outlook:

VBA: Importando los contactos de Outlook a Excel.

8 comentarios:

  1. Muy bueno, lo use sin problemas, gracias por el aporte

    ResponderEliminar
  2. Sí, es bueno.
    Pero ¿es posible suprimir el pop-up de Outlook diciendo "a program is trying to access e-mail address info...?
    Un saludo.
    JC.

    ResponderEliminar
    Respuestas
    1. Hola JC,
      ¿te aparece ese mensaje al ejecutar el código del post?

      Slds

      Eliminar
    2. Hola, Isamel.
      Gracias por tu interés, lo primero. :]
      Así es, al ejecutar la línea que toma la dirección de correo "Cells(filaContacto, 3).Value = .Email1Address"
      Tengo S.O. Wind 7 Enterprise y Outlook 2010
      Un saludo.
      JC.

      Eliminar
    3. que raro...
      probaría añadiendo y deshabilitando las alertas:
      Application.DisplayAlerts = False
      y finalizando el procedimiento con
      Application.DisplayAlerts = True
      para reestablecer los mensajes...
      Slds

      Eliminar
    4. Eso no funciona, ya que la alerta no proviene de excel, sino de Microsoft Outlook. :-[
      Es un bloqueo que empezó con la versión 2007 y posteriores.
      Una pena.
      Muchas gracias.
      JC.

      Eliminar
    5. Hola Melguizo...
      Solo te puedo decir que en mi equipo con Win7 y outlook 2013 (cuando escribí el post) no aparecía ningún mensaje...
      y probando con mi configuración actual (Win7 y office 2016) tampoco..
      por eso me extraña.
      Coincido que el 'problema' está en Outlook.. quizá tengas algo en la configuración?
      Slds

      Eliminar
    6. Hola, Ismael.
      ¡qué envidia me das!
      ¡ojalá pudiera saber qué me falla! ya que tengo este mismo problema con otras macros.
      De cualquier forma, encantado de saludar por este foro y muchas gracias.
      JC.

      Eliminar