移动对象后获取 EntryID
Getting an EntryID after an object is moved
总结
我正在尝试将 hyperlinks 添加到从我已移动到另一个文件夹的电子邮件创建的任务中。
目标是让任务包含对已移动到“已处理电子邮件”文件夹的 Outlook 项目的超级link。
问题
我不明白如何移动 MailItem 并在移动后获取其新的 EntryID。
“幼稚”的方式行不通。使用 Move 方法移动 MailItem 对象后,EntryID 属性 未反映 ID 的变化。
详情
如果 Outlook 项目保留在收件箱中,则使用 outlook:<EntryID>
格式为 Outlook 项目创建 hyperlink 非常容易,因为我只需获取我所在对象的 EntryID link正在。但是,移动对象时 Outlook 会更改 EntryID。
我想了解如何获取更新后的 ID,以便构建准确的 link。
例子
消息框显示 objMail returns 的 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 方法 class returns 表示已移动到指定文件夹的项目的对象。您需要检查返回对象的 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
您好,请您详细说明一下您的回答,我看不懂。
无论如何,您可以考虑处理目标文件夹的 ItemAdd
事件,以确保始终使用更新的条目 ID 值。
这是我的代码,搬家后需要EntryID
。
Sub Movetest1()
Dim olApp As Outlook.Application
Dim olns As Outlook.NameSpace
Dim Fld As Folder
Dim ofSubO As Outlook.MAPIFolder
Dim myDestFolder As Outlook.Folder
Dim ofolders As Outlook.Folders
Dim objItems As Outlook.Items
Dim myRestrictItems As Outlook.Items
Dim i As Long
Dim myitem As Object
' Dim MailItem As Microsoft.Office.Interop.Outlook.MailItem
Dim MailItem, moveditem As Outlook.MailItem
Dim eid As String
Dim sid As Variant
Dim newEID As String
'---------------------------------------------------------------------------------------------------------
Set olApp = New Outlook.Application
Set olns = olApp.GetNamespace("MAPI")
For Each Fld In olns.Folders
If Fld.Name = "GSS Payables" Then
'
' MsgBox Fld.Name
' Debug.Print " - "; Fld.EntryID
Set Fld = olns.GetFolderFromID("000000009DA6D76FBE7A58489450CDF6094F592A0100A2457DC435B22448A832DB721D8185B1000000B6207D0000").Folders("Inbox")
Exit For
End If
Next
Set objItems = Fld.Items
eid = "000000009DA6D76FBE7A58489450CDF6094F592A0700A2457DC435B22448A832DB721D8185B1000000B620800000A2457DC435B22448A832DB721D8185B100007FF773270000"
sid = "000000009DA6D76FBE7A58489450CDF6094F592A0100A2457DC435B22448A832DB721D8185B1000000B6207D0000"
Set myDestFolder = Fld.Folders("Bhagyashri")
'Set myitem = objItems.Find("[SenderName]='Microsoft Outlook '")
Set MailItem = olns.GetItemFromID(eid)
Set moveditem = MailItem.Move(myDestFolder)
"giving error here
newID = moveditem.entryid
Debug.Print "newID -"; newID
' get mailitem.parent.storeid
MsgBox "done"
End
使用以下语法:
Dim MoveToFolder As outlook.MAPIFolder
Dim MyItem As outlook.MailItem
Dim NewEntryID As String
NewEntryID = MyItem.Move(MoveToFolder).ENTRYID
执行MyItem.Move
后,新的ENTRYID
将返回到NewEntryID
变量。
总结
我正在尝试将 hyperlinks 添加到从我已移动到另一个文件夹的电子邮件创建的任务中。
目标是让任务包含对已移动到“已处理电子邮件”文件夹的 Outlook 项目的超级link。
问题
我不明白如何移动 MailItem 并在移动后获取其新的 EntryID。
“幼稚”的方式行不通。使用 Move 方法移动 MailItem 对象后,EntryID 属性 未反映 ID 的变化。
详情
如果 Outlook 项目保留在收件箱中,则使用 outlook:<EntryID>
格式为 Outlook 项目创建 hyperlink 非常容易,因为我只需获取我所在对象的 EntryID link正在。但是,移动对象时 Outlook 会更改 EntryID。
我想了解如何获取更新后的 ID,以便构建准确的 link。
例子
消息框显示 objMail returns 的 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 方法 class returns 表示已移动到指定文件夹的项目的对象。您需要检查返回对象的 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
您好,请您详细说明一下您的回答,我看不懂。
无论如何,您可以考虑处理目标文件夹的 ItemAdd
事件,以确保始终使用更新的条目 ID 值。
这是我的代码,搬家后需要EntryID
。
Sub Movetest1()
Dim olApp As Outlook.Application
Dim olns As Outlook.NameSpace
Dim Fld As Folder
Dim ofSubO As Outlook.MAPIFolder
Dim myDestFolder As Outlook.Folder
Dim ofolders As Outlook.Folders
Dim objItems As Outlook.Items
Dim myRestrictItems As Outlook.Items
Dim i As Long
Dim myitem As Object
' Dim MailItem As Microsoft.Office.Interop.Outlook.MailItem
Dim MailItem, moveditem As Outlook.MailItem
Dim eid As String
Dim sid As Variant
Dim newEID As String
'---------------------------------------------------------------------------------------------------------
Set olApp = New Outlook.Application
Set olns = olApp.GetNamespace("MAPI")
For Each Fld In olns.Folders
If Fld.Name = "GSS Payables" Then
'
' MsgBox Fld.Name
' Debug.Print " - "; Fld.EntryID
Set Fld = olns.GetFolderFromID("000000009DA6D76FBE7A58489450CDF6094F592A0100A2457DC435B22448A832DB721D8185B1000000B6207D0000").Folders("Inbox")
Exit For
End If
Next
Set objItems = Fld.Items
eid = "000000009DA6D76FBE7A58489450CDF6094F592A0700A2457DC435B22448A832DB721D8185B1000000B620800000A2457DC435B22448A832DB721D8185B100007FF773270000"
sid = "000000009DA6D76FBE7A58489450CDF6094F592A0100A2457DC435B22448A832DB721D8185B1000000B6207D0000"
Set myDestFolder = Fld.Folders("Bhagyashri")
'Set myitem = objItems.Find("[SenderName]='Microsoft Outlook '")
Set MailItem = olns.GetItemFromID(eid)
Set moveditem = MailItem.Move(myDestFolder)
"giving error here
newID = moveditem.entryid
Debug.Print "newID -"; newID
' get mailitem.parent.storeid
MsgBox "done"
End
使用以下语法:
Dim MoveToFolder As outlook.MAPIFolder
Dim MyItem As outlook.MailItem
Dim NewEntryID As String
NewEntryID = MyItem.Move(MoveToFolder).ENTRYID
执行MyItem.Move
后,新的ENTRYID
将返回到NewEntryID
变量。