概括
我正在尝试将超链接添加到从已移至另一个文件夹的电子邮件创建的任务中。
目标是使任务包含指向已移至“已处理的电子邮件”文件夹的Outlook项目的超链接。
问题
我不明白如何移动MailItem,然后在移动后获取其新的EntryID。
“幼稚”的方式行不通。使用Move方法移动MailItem对象后,EntryID属性不会反射(reflect)ID的更改。
细节
如果Outlook项保留在收件箱中,则使用outlook:<EntryID>
格式创建指向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
最佳答案
MailItem类的Move方法返回一个对象,该对象表示已移至指定文件夹的项目。您需要 check out 返回对象(而不是源对象)的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
关于vba - 移动对象后获取EntryID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31612238/