VBA Outlook 'olMeetingStatus=olMeetingCanceled 仅适用于调试(Win7、Outlook 2010) [英] VBA Outlook 'olMeetingStatus=olMeetingCanceled works on debug only (Win7, Outlook 2010)
问题描述
在 Outlook 共享日历中,我需要删除选定日期的所有项目,但在将会议状态设置为已取消之前.删除工作得很好,但不能设置状态.但是,在调试.MeetingStatus = olMeetingCanceled
"时效果很好(请使用If isDelete Then
").任何建议都受到高度赞赏.非常感谢
In Outlook shared calendar I need to delete all items for a selected date but before set the meeting status to Cancelled. Deletion works perfectly well, but setting the status not. However when debugging the ".MeetingStatus = olMeetingCanceled
" works perfectly well (pls se line with 'If isDelete Then
').
Any advise is highly appreciated.
Thanks a lot
Function DeleteAppointments(ByVal attendeeName As String, ByVal startDateTime As String, ByVal endDateTime As String, ByVal appSubjectFilter As String, ByVal folderCalendar As String, ByVal subFolderCalendar As String) As String
DeleteAppointments = ""
Dim oApp As Outlook.Application
Dim oNameSpace As Outlook.NameSpace
Dim oFolder As Outlook.MAPIFolder
Dim oApptItem As Outlook.AppointmentItem
Dim sErrorMessage As String
' check if Outlook is running
On Error Resume Next
Set oApp = GetObject("Outlook.Application")
If Err <> 0 Then
'if not running, start it
Set oApp = CreateObject("Outlook.Application")
End If
'get shared Outlook Folder reference
Set oApp = Outlook.Application
On Error GoTo Err_Handler
Set oNameSpace = oApp.GetNamespace("MAPI")
Set oFolder = oNameSpace.GetDefaultFolder(olFolderCalendar)
Set oFolder = oNameSpace.folders(folderCalendar).folders(subFolderCalendar)
Set oItems = oFolder.Items
oItems.IncludeRecurrences = False
oItems.Sort "[Start]"
'Restrict the Items collection for a day
Dim sFilter As String
sFilter = "[Start]>='" & startDateTime & "' AND [Start]<='" & endDateTime & "'"
Set oItemsInDateRange = oItems.Restrict(sFilter)
oItemsInDateRange.Sort "[Start]"
Dim isDelete As Boolean
isDelete = False
Dim i As Integer
i = 1
While i <= oItemsInDateRange.Count
DoEvents
If InStr(oItemsInDateRange(i).Subject, appSubjectFilter) > 0 Then
If InStr(oItemsInDateRange(i).Subject, attendeeName) > 0 Then
isDelete = True
End If
End If
If isDelete Then
'THIS BIT WORKS WHEN DUBUGGING ONLY :-(
oItemsInDateRange(i).MeetingStatus = olMeetingCanceled
oItemsInDateRange(i).Save
oItemsInDateRange(i).Send
'Delete works ok
oItemsInDateRange(i).Delete
i = i - 1
End If
isDelete = False
i = i + 1
Set oItems = oFolder.Items
oItems.IncludeRecurrences = False
Set oItemsInDateRange = oItems.Restrict(sFilter)
oItemsInDateRange.Sort "[Start]"
Wend
Set oApptItem = Nothing
Set oItemsInDateRange = Nothing
Set oItems = Nothing
Set oFolder = Nothing
Set oNameSpace = Nothing
Set oApp = Nothing
Exit Function
Err_Handler:
DeleteAppointments = "Error while deleting. " & Err.Number & " " & Err.Description
End Function
推荐答案
仅在调试是常见问题时有效.
Works only while debugging is a common complaint.
尝试像在调试器中那样减慢进程.
Try slowing the process as is being done in the debugger.
If isDelete Then
oItemsInDateRange(i).MeetingStatus = olMeetingCanceled
oItemsInDateRange(i).Save
oItemsInDateRange(i).Display
oItemsInDateRange(i).Send
oItemsInDateRange(i).Delete
i = i - 1
End If
运行得更慢:
https://msdn.microsoft.com/en-us/图书馆/办公室/ff861853.aspx
If isDelete Then
oItemsInDateRange(i).MeetingStatus = olMeetingCanceled
oItemsInDateRange(i).Save
oItemsInDateRange(i).Display True ' Send manually
oItemsInDateRange(i).Delete
i = i - 1
End If
这篇关于VBA Outlook 'olMeetingStatus=olMeetingCanceled 仅适用于调试(Win7、Outlook 2010)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!