VBA Outlook 'olMeetingStatus=olMeetingCanceled 仅适用于调试(Win7、Outlook 2010) [英] VBA Outlook 'olMeetingStatus=olMeetingCanceled works on debug only (Win7, Outlook 2010)

查看:60
本文介绍了VBA Outlook 'olMeetingStatus=olMeetingCanceled 仅适用于调试(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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆