una tareas tarea sirve que programar para mensual mensaje desde correo convertir como clasificar calendario asignar actividad vba outlook calendar iteration outlook-vba

vba - tareas - Iteración rápida a través de elementos de citas de Outlook



para que sirve tareas de outlook (2)

He escrito una macro que itera a través de un calendario de usuarios y hace modificaciones a las entradas que cubren un determinado critera.

El problema es que cuando el calendario es muy grande, esto lleva mucho tiempo. Parece que no puedo filtrar las citas porque oAppointmentItems parece almacenar las entradas a medida que se crearon, lo que no es necesariamente el mismo orden que cuando comienzan.

El código que estoy usando es este:

Dim oOL As New Outlook.Application Dim oNS As Outlook.NameSpace Dim oAppointments As Object Dim oAppointmentItem As Outlook.AppointmentItem Set oNS = oOL.GetNamespace("MAPI") Set oAppointments = oNS.GetDefaultFolder(olFolderCalendar) For Each oAppointmentItem In oAppointments.Items DoEvents '' Something here Next Set oAppointmentItem = Nothing Set oAppointments = Nothing Set oNS = Nothing Set oOL = Nothing

Si no se elimina el DoEvents (que solo significa que Outlook parece bloquearse para el usuario) ¿hay alguna manera de acelerar esto aplicando algún tipo de filtro? Por ejemplo, citas que comienzan en el futuro.


Oye, no pude hacer que las tareas funcionaran, pero esto parece funcionar en las citas de explicación completa

Dim myStart As Date Dim myEnd As Date myStart = Date myEnd = DateAdd("d", 30, myStart) Debug.Print "Start:", myStart Debug.Print "End:", myEnd ''Construct filter for the next 30-day date range strRestriction = "[Start] >= ''" & _ Format$(myStart, "mm/dd/yyyy hh:mm AMPM") _ & "'' AND [End] <= ''" & _ Format$(myEnd, "mm/dd/yyyy hh:mm AMPM") & "''" ''Check the restriction string Debug.Print strRestriction Const olFolderCalendar = 9 Set olApp = CreateObject("Outlook.Application") Set olNS = olApp.GetNamespace("MAPI") Set oCalendar = olNS.GetDefaultFolder(olFolderTasks) Set oItems = oCalendar.items oItems.IncludeRecurrences = True '' oItems.Sort "[Start]" '' commented out worked for me.. ''Restrict the Items collection for the 30-day date range Set oItemsInDateRange = oItems.Restrict(strRestriction) Debug.Print oItemsInDateRange.Count


Puede usar Restringir para filtrar. Tenga en cuenta que las fechas tienen el formato de mes, día, año y que se filtran como cadenas, aunque estén almacenadas como fechas:

Set olApp = CreateObject("Outlook.Application") Set olNS = olApp.GetNamespace("MAPI") Set olRecItems = olNS.GetDefaultFolder(olFolderTasks) strFilter = "[DueDate] > ''1/15/2009''" Set olFilterRecItems = olRecItems.Items.Restrict(strFilter) For i = 1 To olFilterRecItems.Count <...>

Más información: http://msdn.microsoft.com/en-us/library/bb220369.aspx