• 👏 Bienvenido a nuestra comunidad Excel

    ¿Todavía no estás registrado? 😲

    Registrate gratis aquí y podrás:

    💪 Hacer preguntas a los expertos
    ⬇️ Descargar ejemplos y plantillas
    🏅 
    Acceder a contenidos premium

Rellenar Citas del Calendario de Outlook desde Excel

mamelito

Member
hola, tengo esta macro para rellenar las citas del calendario de outlook desde una hoja excel, antes funcionaba perfectamente y ahora en outlook 2016 no hace nada, alguna ayuda? gracias.

Sub AñadirCitas()
'trasladamos citas desde Excel hacía el Calendario de Outlook

Dim olApp As Object
Dim olNs As Object
Dim olCarpetas As Object, olSubcarpetas As Object
Dim olCalendarios As Object
Dim objCita As Object

Dim sh As Worksheet
Dim i As Long, UF As Long

On Error Resume Next
'Creamos el objeto para la aplicación MS Outlook y abrimos
Set olApp = GetObject(, "Outlook.Application")
If olApp Is Nothing Then Set olApp = CreateObject("Outlook.Application")
On Error GoTo 0

'determinamos cuál es la última fila con datos
Set sh = Sheets("Calendario")
UF = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row

If Not olApp Is Nothing Then
'Inicia una sesión de usuario en MAPI
Set olNs = olApp.GetNamespace("MAPI")
olNs.LogOn

'buscamos, con el doble bucle, entre todas las carpetas de Outlook
'y entre todos los Calendarios existentes el que se llame 'temporales'
For Each olCarpetas In olNs.Folders
For Each olSubcarpetas In olCarpetas.Folders
''''''''
If olSubcarpetas.Name = "Calendarios" Then
For Each olCalendarios In olSubcarpetas.Folders
'con el nombre de nuestro Calendario!!
If olCalendarios.Name = "temporales" Then
'y recorremos todos los datos de la hoja de cálculo
For i = 2 To UF
'Generamos una nueva cita
Set objCita = olCalendarios.Items.Add(1)
'y la completamos con la info de la hoja en Excel
With objCita
'el Asunto
.Subject = sh.Range("A" & i).Value
'la Hora de Inicio
.Start = CDate(sh.Range("B" & i).Value) & Chr(32) & CDate(sh.Range("C" & i).Value)
'la Hora de finalización
.End = CDate(sh.Range("D" & i).Value) & Chr(32) & CDate(sh.Range("E" & i).Value)
'el Texto o Cuerpo de la cita
.Body = sh.Range("F" & i).Value
'la Ubicación de la cita
.Location = sh.Range("G" & i).Value
'la categoría que le asignamos
.Categories = sh.Range("H" & i).Value
'Mostrar como: 0-Disponible, 1-Provisional, 2-Ocupado, 3-Fuera de la oficina o 4-Trabajando en otro lugar
.BusyStatus = sh.Range("I" & i).Value
'si activamos una cita de Todo el día
.AllDayEvent = sh.Range("J" & i).Value
'.ReminderSet = True 'si queremos tener activa el recordatorio (15 minutos antes, por defecto)
.Save 'guardamos la cita
End With
Next i

'si hemos dado en el bucle con el Calendario buscado
'salimos de éste (dejamos de buscarlo)
Exit For
End If

Next olCalendarios
End If
Next olSubcarpetas
Next olCarpetas
End If

'liberamos memoria de los objetos definidos
Set olApp = Nothing
Set olNs = Nothing
Set olStore = Nothing
Set olCal = Nothing
Set objAppt = Nothing
Set xlSheet = Nothing
Exit Sub
End Sub
 

Héctor Miguel

Well-known member
esta macro para rellenar las citas del calendario de outlook desde una hoja excel... ahora en outlook 2016 no hace nada
si no hace nada, es probable que algun "If ..." no se cumpla (p.ej.)
- a menos que tengas una bandeja personalizada (?)
- el nombre de "Calendarios" pudiera ser "Mis calendarios" o "Calendars" o ???

si es la bandeja por default (de outlook) prueba cambiando el "nombre" por su constante numerica (9)

ciclar por todos los (sub)calendarios (bandeja por omision) lo puedes hacer directo desde el "NameSpace" +/- asi:
Código:
  For Each olCalendarios In olNS.GetDefaultFolder(9).Folders
    If olCalendarios.Name = "temporales" Then
    ...
    End If
  Next

te ahorras los 2 "For...Next:" de olCarpetas y olSubcarpetas (a menos que "Calendarios" sea una bandeja personalizada ?)
 
Arriba