【发布时间】:2015-04-21 00:41:32
【问题描述】:
我有一本至少有 15 人使用并定期更新的工作簿,其中包含客户信息以及 H3:H1500 列中的电子邮件。使用 Worksheet_FollowHyperlink 事件,我们可以通过我们的 Outlook 帐户发送电子邮件,这些帐户是预先编写的,并且取决于请求订单的一周中的哪一天(周一至周五、周六和周日),并且代码可以很好地生成消息。 我的主要问题是跟踪对客户端的响应。 em>我尝试使用录制日期(现在的函数)和环境(“用户名”),只要选择H列中的超链接,而且就像我拥有的那样电子邮件子设置为 .Display(因此人们可以在需要时进行任何最后一分钟的调整)它只记录谁选择了超链接(当消息从未实际发送时,显然发生了很多意外)。我在整个论坛中发现了几个线程以及其他引用创建类模块的线程,我实现了一个用于查看它是否可以在我的代码中工作的线程,但是通过添加它,整个电子邮件子变得无用,所以我恢复到旧形式。由于我在 VBA 方面不是很有经验(由于帮助和反复试验,我已经走到了这一步),我意识到我的一些代码选择可能看起来很愚蠢,如果有更好的方法来做到这一点,我愿意它 - 我只知道,这张表目前大部分有效,如果可能的话,我希望可以改进它。
我当前的电子邮件子是:
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Dim Body1, Body2, Body3 As String
Dim olApp As Outlook.Application
Dim OlMail As Outlook.MailItem
On Error Resume Next
Application.EnableEvents = False
Set olApp = GetObject(,"Outlook.Application")
Do While olApp.Inspectors.Count = 0
DoEvents
Loop
Set olMail = olApp.Inspectors.Item(1).CurrentItem
With olMail
Body1 = "This is my weekday text"
Body2 = "This is my Saturday text"
Body3 = "This is my Sunday text"
.Subject = "Subject"
.Attachemnts.Add "C:\Path"
.CC = Target.Range.Offset(0,4).Text
.BCC = ""
If Target.Range.Offset(0,5).Text = "No" Then
.Body1
If Target.Range.Offset(0,5).Text = "Yes" Then
.Body2
If Target.Range.Offset(0,5).Text = "Sunday" Then
.Body3
.Display
End With
forward:
Application.EnableEvents = True
Exit Sub
halt:
MsgBox Err.Description
Resume forward
End Sub
[上面的代码在 Excel VBE 中,下面的代码在 Outlook VBE 中,我应该在开始之前包含它 - 它现在对我来说工作正常,所以我不确定它为什么没有编译。 ..]
Function GetCurrentItem() As Object
Dim objApp As Application
Set objApp = CreateObject("Outlook.Application")
On Error Resume Next
Select Case TypeName(objApp.ActiveWindow)
Case "Explorer"
Set GetCurrentItem = objApp.ActiveExplorer.Selection.Item(1)
Case "Inspector"
Set GetCurrentItem = objApp.ActiveInspector.CurrentItem
End Select
Set objApp = Nothing
End Function
感谢任何帮助!
【问题讨论】:
-
我的主要问题是跟踪对客户的响应。这实际上意味着什么?
-
我希望能够跟踪访问电子邮件超链接并实际发送它的用户和日期。 (从 .Display 继续到 .Send)这样,我可以运行报告以准确跟踪谁已得到回复,以及谁仍需要发送回复。
-
此代码甚至无法编译 BTW。
-
我不认为您将能够跟踪
.Send,除非您实际上将其包含在此脚本的一部分中。脚本终止后,您将丢失Outlook应用程序对象(及其所有子对象,包括您的 MailItem 对象)的句柄。我可以想办法做到这一点,但它会很复杂...... -
检测消息是否已发送是相当简单的,但我想不通的是如何确定消息是否在没有发送的情况下关闭。如果不捕获该条件,您将陷入无限循环。我建议使用
FollowHyperlink以外的其他方法,因为无意的点击会导致误报。 注意您的On Error Resume Next语句会导致问题,因为它实际上并没有捕获任何错误...