mailitem.entryID in Excel VBA



我可以在Excel VBA中使用mailitem.entryID吗?

我有一个使用 excel 的工具,我可以在其中使用电子表格作为 UI 向收件人发送 Outlook 电子邮件以显示用户数据。我需要将发送给用户的每封电子邮件的条目 ID 存储在 excel 表中。我可以在代码(excel vba(中设置mailitem.entryID = worksheet.cells().value吗?它会检索条目 ID 吗?你能给我你对此的意见吗?谢谢你的帮助。


Dim AppOutlook As Object
Dim MailOutlook As Object
Dim Emailto, ccto, sendfrom As String
Set AppOutlook = CreateObject("Outlook.Application")
Set MailOutlook =AppOutlook.CreateItem(0)
Emailto = worksheet.Cells().Value
ccto = worksheet.Cells().Value
sendfrom = "email"
With OutMail
.SentOnBehalfOfName = sendfrom
.To = Emailto
.CC = ccto
.BCC = ""
.Subject = 
.BodyFormat = olFormatHTML
.HTMLBody = "body here"
.Send 

这是我的代码,我计划在代码的最后一行添加代码工作表.cells.value = MailOutlook.entryID。可能吗?以及在哪里添加 AddItem 事件?

您可以在发送消息读取EntryID属性。您不能在发送邮件之前或之后立即执行此操作 - 当邮件异步发送并移动到"已发送邮件"文件夹时,邮件将被更改。在"已发送邮件"文件夹中访问条目 ID 的最正常情况是在"已发送邮件"文件夹中触发Items.ItemAdd事件时。

调用 Send 方法后,邮件项可能不再存在。它可以移动到发件箱文件夹,以便传输提供进一步处理。项目可以标记为由传输提供程序处理,但尚未发送。因此,我们需要在代码中处理 ItemSend 事件。

如果您需要确保邮件项目已发送,我建议您处理 Items 类的 ItemAdd 事件(请参阅 Folder 类的相应属性(。例如,发送 Outlook 项目时,已发送的副本将放入 Outlook 中的"已发送邮件"文件夹中。您可以处理该文件夹的 ItemAdd 事件,以确保确定已发送该项目。请考虑在显示 Outlook 项之前添加用户属性,并在 ItemAdd 事件处理程序中检查它以唯一标识该项。

基于您的代码的演示代码:

Sub Test3()
Dim AppOutlook As Object
Dim MailOutlook As Object
Dim Emailto, ccto, sendfrom As String
Set AppOutlook = CreateObject("Outlook.Application")
Set MailOutlook = AppOutlook.CreateItem(0)
Emailto = Worksheets("Sheet3").Cells(1, 1).Value
ccto = Worksheets("Sheet3").Cells(2, 1).Value
sendfrom = "test@outlook.com"
With MailOutlook
.SentOnBehalfOfName = sendfrom
.To = Emailto
.CC = ccto
.BCC = ""
.Subject = "Test"
.BodyFormat = olFormatHTML
.HTMLBody = "body here"
'.Display
.Send
End With
End Sub

一些ItemAdd代码段供您参考(当前事件不正确,我们仍然需要测试它(:

Option Explicit
Private objNS As Outlook.NameSpace
Private WithEvents objItems As Outlook.Items
‘Private Sub Application_Startup()
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim objWatchFolder As Outlook.Folder
Dim AppOutlook As Object
Set AppOutlook = CreateObject("Outlook.Application")
Set objNS = AppOutlook.GetNamespace("MAPI")
'Set the folder and items to watch:
Set objWatchFolder = objNS.GetDefaultFolder(olFolderInbox)
Set objItems = objWatchFolder.Items
Set objWatchFolder = Nothing
End Sub
Private Sub objItems_ItemAdd(ByVal Item As Object)
' Your code goes here 
MsgBox "Message subject: " & Item.Subject & vbcrlf & "Message sender: " & Item.SenderName &" (" & Item.SenderEmailAddress & ")"
Worksheets("Sheet3").Cells(3, 1).Value = Item.EntryID
Set Item = Nothing
End Sub

MailItem对象是 Outlook 的 VBA 对象库的一部分。您可以在此处查看 MSDN 上MailItem对象的文档。

若要在 Office 中使用来自不同程序Microsoft VBA 对象(例如,从 Excel 调用 Outlook、从Word 调用 Visio、从 Powerpoint 调用 Excel(,首先需要确保在 Visual Basic 编辑器 (VBE( 中选择了正确的References


如何在Excel中打开Outlook引用:

  • 在 Excel 的 VBE 中,转到Tools > References

  • 将出现一个References - VBAProject框。

  • Available References:下向下滚动,直到到达类似Microsoft Outlook 16.0 Object Library(这将因您使用的 Office 版本而异(

  • 勾选该框并按OK


现在,Outlook 对象引用已启用,您应该能够从 Excel 调用 Outlook 对象和方法,包括MailItem

最新更新