【发布时间】:2017-09-26 16:22:19
【问题描述】:
我有一个 Excel 工作簿,其中包含电子邮件模板和附件列表。
我对每个列表项都有一个插入按钮,用于单独组合每封电子邮件(根据程序需要)。
我已经编写了代码来组合它们并显示一封电子邮件:
Public Sub SendToThisPerson()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim r, c As Integer
Dim b As Object
Set b = ActiveSheet.Buttons(Application.Caller)
With b.TopLeftCell
r = .Row
c = .Column
End With
r = 14
c = 3
Dim filename As String, subject1 As String, path1, path2, wb As String
Dim wbk As Workbook
filename = ThisWorkbook.Worksheets(1).Cells(r, c + 4)
path1 = Application.ThisWorkbook.Path & ThisWorkbook.Worksheets(1).Range("F4")
path2 = Application.ThisWorkbook.Path & ThisWorkbook.Worksheets(1).Range("F6")
wb = ThisWorkbook.Worksheets(1).Cells(r, c + 7)
Dim outApp As Outlook.Application
Dim oMail As Outlook.MailItem
Set outApp = New Outlook.Application
Set oMail = outApp.CreateItemFromTemplate(path1 & filename)
oMail.Display
subject1 = oMail.subject
subject1 = Left(subject1, Len(subject1) - 10) & Format(ThisWorkbook.Worksheets(1).Range("D7"), "DD/MM/YYYY")
Set wbk = Workbooks.Open(filename:=path2 & wb)
wbk.Worksheets(1).Range("I4") = ThisWorkbook.Worksheets(1).Range("D7").Value
wbk.Close True
With oMail
.subject = subject1
.Attachments.Add (path2 & wb)
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
用户决定发送或不发送。
我想知道是否点击了“发送”按钮,将发送时间添加到工作表中。
我尝试了应用程序事件。
【问题讨论】:
-
本质上,您希望在 Outlook 中(而不是在 Excel 中)捕获 Application.ItemSend 事件,并且您希望确保可以区分任何其他邮件项目和自动生成的邮件项目。可能是某个
.To电子邮件地址,或者在正文或主题行中有某个字符串(例如---auto email---)来识别这些电子邮件。如果是这种情况,那么 Outlook VBA(同样,不是 Excel)将不得不将您想要的信息写入该 Excel 文件。 -
我不想写邮件。我只需要知道电子邮件是否已发送!?如果用户点击了发送,系统让我们说现在()的时间,将被写在工作表上,以表明此列表项已合并并发送。
-
我在网上看到过代码,有人用了很有趣的方法:创建一个对象,把打开的邮件放到这个对象上,然后使用应用事件。例如 _Close 事件,如果电子邮件是用 X(红色按钮)或这个方向的东西关闭的。你认为它会如何运作?我应该花时间在这上面,否则它不适用于 Outlook 项目?
-
也许我应该停止尝试并将其留给其他人。显然我无法表达我的观点。再次,我只能向您指出此链接:msdn.microsoft.com/en-us/library/ff865379.aspx,并希望您了解您的最后评论是正确的。查看链接站点上的代码示例,并确保按照代码中的建议创建 mailItem
WithEvents。然后你应该能够捕获按钮按下。