我正在尝试以编程方式添加超链接到从我已移动到另一个文件夹的电子邮件创建的任务.目标是让任务包含链接到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)
在此先感谢您的帮助!
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)