Outlook VBA - 移动对象后获取EntryID

LJ.*_*LJ. 5 outlook vba

摘要

我正在尝试以编程方式添加超链接到从我已移动到另一个文件夹的电子邮件创建的任务.目标是让任务包含链接到Outlook项目的超链接,该项目被移动到"已处理的电子邮件"文件夹"但我遇到了一些麻烦.在移动后获取对象的EntryID的最佳方法是什么?

问题

但是,我不明白如何移动MailItem,然后在移动后以编程方式获取其新的EntryID."天真"的方式不起作用.使用Move方法移动MailItem对象后,EntryID属性不会反映ID的更改.

细节

outlook:<EntryID>如果outlook项目保留在收件箱中,则使用该格式创建指向Outlook项目的超链接很容易,因为我只能获取我链接到的对象的EntryID.但是,Outlook会在移动对象时更改EntryID.我想了解如何获取更新的ID,以便我可以构建一个准确的链接.

请参阅以下示例代码.消息框显示objMail的EntryID属性仍然返回相同的值,尽管移动了对象.但是,在目标文件夹中的邮件上运行单独的宏可确认EntryID已随移动而更改.

Sub MoveObject(objItem As Object)

Select Case objItem.Class
Case olMail

    Dim objMail As MailItem
    Set objMail = objItem

    MsgBox (objMail.EntryID)

    Dim inBox As Outlook.MAPIFolder
    Set inBox = Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
    Dim destFolder As Outlook.MAPIFolder
    Set destFolder = inBox.Folders("Processed Email")
    If (Application.ActiveExplorer().CurrentFolder.Name <> destFolder.Name) Then 
        objMail.Move destFolder
    End If
    MsgBox (objMail.EntryID)
End Select
End Sub
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!

Eug*_*iev 6

MailItem类的Move方法返回一个对象,该对象表示已移动到指定文件夹的项目.您需要检查返回对象的EntryID值,而不是源对象的值.

无论如何,您可以考虑处理目标文件夹的ItemAdd事件,以确保始终使用更新的条目ID值.

 Sub MoveItems() 
  Dim myNameSpace As Outlook.NameSpace 
  Dim myInbox As Outlook.Folder 
  Dim myDestFolder As Outlook.Folder 
  Dim myItems As Outlook.Items 
  Dim myItem As Object  
  Set myNameSpace = Application.GetNamespace("MAPI") 
  Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox) 
  Set myItems = myInbox.Items 
  Set myDestFolder = myInbox.Folders("Personal Mail") 
  Set myItem = myItems.Find("[SenderName] = 'Eugene Astafiev'") 
  While TypeName(myItem) <> "Nothing" 
   myItem.Move myDestFolder 
   Set myItem = myItems.FindNext 
  Wend 
 End Sub
Run Code Online (Sandbox Code Playgroud)