jueves, 26 de octubre de 2017

VBA: Importar Calendario desde Outlook a Excel

Días atrás vimos como crear citas en el calendario de Outlook desde nuestra hoja de cálculo (ver).

Hoy veremos el proceso contrario, cómo recuperar información de las citas del calendario de Outlook y verlas listadas en nuestras hoja de cálculo.


Es una macro que emplea las mismas propiedades que en el proceso anterior comentado.

Como peculiaridad hemos incluido un 'filtro' por fecha de inicio de las Citas, para que devuelva únicamente aquellas que comiencen en el momento actual y hasta treinta días después.

Añadimos el siguiente código en un módulo estándar de nuestro proyecto de VB:

Sub ListaCitasdeOutlook()
Dim olApp As Object, olNS As Object, olCalendario As Object
Dim Cita As Object
Dim fila As Long

Dim FechaIni As Date, FechaFin As Date
FechaIni = Now         'el día actual
FechaFin = (Now + 30)  'hasta 30 días después

'Trabajamos sobre Outlook
Set olApp = CreateObject("Outlook.Application")
Set olNS = olApp.GetNamespace("MAPI")
'declaramos el objeto de la carpeta de los Calendarios
'(9 equivale a la carpeta del Calendario)
Set olCalendario = olNS.GetDefaultFolder(9)
'Ordenamos las Citas por Fecha de Inicio
Set misCitas = olCalendario.Items
misCitas.Sort "[Start]", False

'cabecera en nuestra hoja de cálculo
Range("A1:L1").Value = Array("Asunto", "Fecha-Hora Inicio", "Fecha-Hora fin", "Cuerpo", _
    "Duración(minutos)", "Ubicación", "Categoria", "Organizador", _
    "Asitentes invitados", "Asistentes opcionales", "Mostar como", "Todo el día")
'completamos los datos desde la fila 2 de la hoja seleccionada
fila = 2
'recorremos todas las citas del calendario
For Each Cita In misCitas
    If Cita.Start >= FechaIni And Cita.Start <= FechaFin Then
        Cells(fila, "A").Value = CStr(Cita.Subject)     'Asunto
        Cells(fila, "B").Value = Cita.Start             'Fecha + Hora Inico
        Cells(fila, "C").Value = Cita.End               'Fecha + Hora Fin
        Cells(fila, "D").Value = Cita.Body              'Cuerpo o texto
        Cells(fila, "E").Value = Cita.Duration          'Duración
        Cells(fila, "F").Value = Cita.Location          'Ubicación
        Cells(fila, "G").Value = Cita.Categories        'Categoria
        Cells(fila, "H").Value = Cita.Organizer         'Organizador
        Cells(fila, "I").Value = Cita.RequiredAttendees 'Asistentes
        Cells(fila, "J").Value = Cita.OptionalAttendees 'Asistentes
        Cells(fila, "K").Value = Cita.BusyStatus        'Tipo de estado
        '0-Disponible, 1-Provisional, 2-Ocupado, 3-Fuera de la oficina o 4-Trabajando en otro lugar
        Cells(fila, "L").Value = Cita.AllDayEvent       'marcado como evento de Todo el día
        
        'preparamos para siguiente fila
        fila = fila + 1
    End If
Next Cita

MsgBox "Proceso finalizado"
'liberamos memoria
Set Cita = Nothing
Set olCalendario = Nothing
Set olNS = Nothing
Set olApp = Nothing
End Sub

Tras ejecutar nuestra macro veremos la lista de citas...

6 comentarios:

  1. Hola, muchas gracias, me funciona muy bien excepto para las tareas cíclicas del outlook. No las descarga a excel.
    Sabes como podría descargarlas también???

    ResponderEliminar
    Respuestas
    1. Hola,
      lo revisaré.. en teoría esto recorre los días del calendario y retorna cada cita, y debería importar poco si fuera o no cíclica

      Investigaré al respecto

      Saludos

      Eliminar
  2. Gracias funciona perfecto... como podría cambiar el calendario default por otro???

    ResponderEliminar
    Respuestas
    1. Hola,
      suele ser algo más elaborado, ya que hay que recorrer todos los calendarios y encontrar el que tenga un nombre concreto

      Echa un vistazo a este otro post https://excelforo.blogspot.com/2017/10/vba-rellenar-Citas-Calendario-Outlook-desde-Excel.html

      Saludos

      Eliminar
  3. hola y si quiero importar el calendario de un sala?

    ResponderEliminar
    Respuestas
    1. Hola amyruiz,
      lo siento, pero no estoy familiarizado con Outlook y desconozco el concepto de 'sala' dentro de la herramienta...
      Pero imagino será similar al de los calendarios, y habrá que buscar los objetos y encontrar el del nombre adecuado

      Siento no poder decirte más
      :'(

      Saludos

      Eliminar

Nota: solo los miembros de este blog pueden publicar comentarios.