Citas Calendarios Personalizados VBA

Cita Calendarios Personalizados VBA

Excel - Outlook
En Office Outlook podemos llegar a tener más de un Calendario, además del calendario principal que por defecto viene con la instalación de Office. Desde Office Excel podemos crear, establecer citas en éstos calendarios personalizados de una manera muy rápida, utilizando código Vba.
Establecer cita en calendarios personalizados Vba
Héctor Miguel Orozco Díaz
Enlaces de Interés
Desarrollo
Supongamos que se han creado (sub)Calendarios en la Carpeta Calendario de Office Outlook, a los cuales hemos llamado, por ejemplo:
[ pruebas, pruebas b, pruebas c ]
Desde Office Excel, podemos establecer las citas correspondientes a cada (sub)Calendario 

- Columna A -Identificadores
- Columna B - Nombres Calendarios
- Columna C - Fechas
Desde la interfaz de Excel, abrimos Visual basic de Excel [ Alt + F11] e insertar un Módulo Estándar [ menú Insertar -> Módulo ]
Por cortesía de Ken Slovak y Michael Bauer resulta lo siguiente:
El método CreateItem utiliza la carpeta principal del tipo de objeto (correo, cita, etc.) :
Set miCita = miOutlook.CreateItem(1)
Por lo que para establecer citas (ó items) en una "determinada" (sub)carpeta, seria necesario
- Crear el objeto en la carpeta principal (según su tipo) y después "moverlo" a la (sub)carpeta específica (CreateItem)
- Crear el objeto en la (sub)carpeta determinada por la colección <carpeta>.Items.Add (tipo) (NO por el método CreateItem)
Cómo resultado, el código usando "late binding" :
Sub Agendar_en_miCalendario()
Dim miOutlook AsObject, miCalendario AsObject, miCita AsObject, _
Fila As Integer, uFila As Integer
uFila = Range("a65536").End(xlUp).Row
On Error GoTo Crear
Set miOutlook = GetObject(, "outlook.application")
If Err = 0 ThenGoTo Creado
Crear:
Err.Clear
Set miOutlook = CreateObject("outlook.application")
Creado:
On Error GoTo0
For Fila = 2 To uFila
' en la col-B se tienen los nombres de los calendarios
Set miCalendario = miOutlook.Session.GetDefaultFolder(9).Folders.Item(Range("b" & Fila).Text)
Set miCita = miCalendario.Items.Add(1)
' en la col-A se tienen los identificadores del recordatorio/cita
miCita.Subject = "Vencimiento de: " & Range("a" & Fila).Value
' en la col-C se tienen las fechas de los vencimientos
miCita.Start = "11:00 am" & Format(Range("c" & Fila).Value, "mm/dd/yyyy")
miCita.End = "11:15 am" & Format(Range("c" & Fila).Value, "mm/dd/yyyy")
miCita.ReminderMinutesBeforeStart = 0 ' se deja en 0 para que avise en ese momento
miCita.ReminderPlaySound = True
miCita.Save
Next
miOutlook.Quit
Set miCita = Nothing
Set miOutlook = Nothing
End Sub
Resultado

Si se quisiera controlar el tiempo desde la Interfaz de Excel

Columna D - Hora Inicio
Columna E - Hora Fin
Cambios a realizar en el código
De esto
Determinación de Fechas - horas Vencimiento
miCita.Start = "11:00 am" & Format(Range("c" & Fila).Value, "mm/dd/yyyy")
miCita.End = "11:15 am" & Format(Range("c" & Fila).Value, "mm/dd/yyyy")
a esto
miCita.Start = Format(Range("d" & Fila).Value, "h:mm AM/PM") & _
Format(Range("c" & Fila).Value, "mm/dd/yyyy")
miCita.End = Format(Range("e" & Fila).Value, "h:mm AM/PM") & _
Format(Range("c" & Fila).Value, "mm/dd/yyyy")
Resultado

Y ...eso es todo
... No hagáis mal uso de los conocimientos que se os ofrecen 
![]()
Enlaces de Interés
Crear calendarios adicionales (Office Word 2007)
http://office.microsoft.com/es-es/outlook/HP100800313082.aspx
Crear calendarios adicionales (Office Versiones anteriores)
http://office.microsoft.com/es-es/outlook/HP010222853082.aspx