2014-10-06 34 views
0

我有一些代码应该循环所有未来的约会;如果它们符合某个标准,则从日历中删除它们。使用VBA和MS Outlook,自动删除约会

Sub DeleteFutureImportedCalendarItems() 
Dim objOutlook As Outlook.Application 
Dim objNamespace As Outlook.NameSpace 
Dim objFolder As Outlook.MAPIFolder 
Dim objAppointment As Outlook.AppointmentItem 

Dim strSubject As String 
Dim strLocation As String 
Dim dteStartDate As Date 
Dim Category As String 

'******************************** Set Criteria for DELETION here ******************************** 
strSubject = "[Imported]" 
strLocation = "AC" 
dteStartDate = Date 
Category = "Yellow Category" 
'************************************************************************************************ 

Set objOutlook = Outlook.Application 
Set objNamespace = objOutlook.GetNamespace("MAPI") 
Set objFolder = objNamespace.GetDefaultFolder(olFolderCalendar) 

For Each objAppointment In objFolder.Items 

    If Right(objAppointment.Subject, 10) = strSubject And objAppointment.Location = strLocation And _ 
    objAppointment.Start >= dteStartDate And objAppointment.Categories = Category Then 
     objAppointment.Delete 


    End If 
Next 

End Sub

此代码工作的大部分。

问题是这不会删除所有满足条件的约会。如果我多次运行代码,它每次都会抓取更多的代码,但我必须运行此函数5到6次以获取所有代码。

我相信问题是'objFolder.Items',因为它不会“抢”所有的约会。

回答

2

删除项目会更改集合。从倒数循环到1代替:

set oItems = objFolder.Items 
for i = oItems.Count to 1 step -1 do 
    set objAppointment = oItems.Item(I) 
    ...