gpt4 book ai didi

vba - 移动对象后获取 EntryID

转载 作者:行者123 更新时间:2023-12-01 17:02:04 26 4
gpt4 key购买 nike

摘要

我正在尝试添加指向从已移至另一个文件夹的电子邮件创建的任务的超链接。

目标是让任务包含指向已移至“已处理电子邮件”文件夹的 Outlook 项目的超链接。

问题

我不明白如何移动 MailItem,然后在移动后获取其新的 EntryID。

“天真的”方式行不通。使用 Move 方法移动 MailItem 对象后,EntryID 属性不会反射(reflect) 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

最佳答案

Move MailItem 类的方法返回一个对象,该对象表示已移动到指定文件夹的项目。您需要检查返回对象的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com