1

在 Outlook 宏中使用该Move方法时AppointmentItem,我失去了接收更新的能力,因为它正在创建项目的副本而不是真正移动它。此行为会导致项目不再与原始项目链接,因此不会保留项目更新。

我想通过 VBA 复制您获得的剪切/粘贴行为,该行为能够维护原始对象并且不会导致更新丢失。

我相信这与基于搜索的 GlobalAppointmentID 有关,但是我无法找到实际移动约会的方法。

我正在使用的代码如下。GetFolderFromPath 是一个帮助函数,它只从路径中返回一个文件夹对象,效果很好。

Sub MoveItem()
    Dim targetPath As String: targetPath = "\\tnolan@microsoft.com\Calendar\OOFS"

    If Application.ActiveExplorer.Selection.Count = 0 Then
        MsgBox ("No item selected")
        Exit Sub
    Else
        Dim targetFolder As Outlook.Folder
        Set targetFolder = GetFolderFromPath(targetPath)

        For x = 1 To Application.ActiveExplorer.Selection.Count
            Dim oSelected As Variant
            Set oSelected = Application.ActiveExplorer.Selection.Item(x)

            If oSelected.Class = olAppointment Then
                Dim NS As NameSpace: Set NS = Application.GetNamespace("MAPI")
                Dim oAppt As AppointmentItem: Set oAppt = NS.GetItemFromID(oSelected.EntryID)
                oAppt.Move targetFolder
                Set oAppt = Nothing
                Set NS = Nothing
            End If
            Set oSelected = Nothing
        Next x
        Set targetFolder = Nothing
    End If
End Sub
4

2 回答 2

0

Outlook 仅针对默认日历文件夹处理传入的会议更新/删除。如果您将约会移动到其他文件夹,收件箱中的会议更新将在默认日历文件夹中创建一个新约会。

于 2013-06-18T21:50:08.303 回答
0

在玩了一会儿我的代码之后,我发现这段代码在类似的情况下也适用于我:

oAppt.CopyTo(targetFolder, olCopyAsAccept)
oAppt.Delete

我有一种感觉,由于某种原因,该AppointmentItem.Move命令会通过,因为olCreateAppointment它总是会创建一个新的GlobalAppointmentID.

但是,这仍然会产生对 Appointment 做出响应的副作用。

于 2019-11-25T14:28:55.320 回答