Citas 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
- 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