2009-12-18 12 views
12

मैंने एक मैक्रो लिखा है जो उपयोगकर्ता कैलेंडर के माध्यम से पुनरावृत्त करता है और एक निश्चित मानदंड को भरने वाली प्रविष्टियों में संशोधन करता है।आउटलुक अपॉइंटमेंट आइटम्स के माध्यम से जल्दी से इटरेटिंग

समस्या यह है कि जब कैलेंडर बहुत बड़ा होता है, तो ऐसा करने में काफी समय लगता है। मैं नियुक्तियों को फ़िल्टर करने में सक्षम नहीं प्रतीत होता क्योंकि oAppointmentItems प्रविष्टियों को स्टोर करने के लिए प्रतीत होता है - जो आवश्यक नहीं है जब वे शुरू होते हैं।

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 

DoEvents को हटाने (जो केवल इसका मतलब है कि आउटलुक उपयोगकर्ता के लिए बंद करने के लिए प्रकट होता है) की कमी वहाँ किसी भी तरह से है कि मैं इस लगाने से तेजी लाने के कर सकते हैं:

कोड मैं उपयोग कर रहा हूँ यह है कुछ प्रकार का फिल्टर? उदाहरण के लिए, भविष्य में नियुक्तियां जो शुरू होती हैं।

उत्तर

14

आप फ़िल्टर करने के लिए प्रतिबंधित का उपयोग कर सकते हैं। ध्यान दें कि दिनांक प्रारूप माह, दिन, वर्ष में हैं और वे तारों के रूप में फ़िल्टर्ड रहे हैं कि, दिनांक के रूप में जमा है, भले ही:

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

अधिक जानकारी: http://msdn.microsoft.com/en-us/library/bb220369.aspx

+0

यह बिल्कुल था मैं आज के लिए क्या देख रहा था पर काम करने लगते हैं! इसने मुझे बहुत परेशानी बचाई है। एक बात जो मुझे नोटिस है, वह यह है कि मैं इसे डेट फ़िल्टर के साथ काम करने के लिए नहीं प्राप्त कर सकता हूं, और यह सही तिथि प्राप्त करना मुश्किल है (ऐसा लगता है कि वे दिनांक हैं या Outlook में दिनांक/समय हैं)। पसंद> दिनांक - 1 दिन और <तिथि केवल तारीख के साथ एक लौटाएगी, जबकि तिथि> तिथि और तिथि <दिनांक + 1 दिन दिनांक/समय – Jeff

+0

के साथ आइटम वापस कर देगा VBA में प्रारंभिक बाध्यकारी का उपयोग करके, olRecItems को DIM'd कैसे किया जाना चाहिए? (आउटलुक। ???)। धन्यवाद .. –

+1

@iDevlop Outlook के रूप में। MAPIFolder AFAIK। – Fionnuala

0

अरे कार्यों काम नहीं कर सकता है, लेकिन इस नियुक्तियों full explaination

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 
संबंधित मुद्दे