预览报告时,右键单击提供选项,发送至...->邮件收件人。
我需要捕获此事件并执行代码,以读取出现在Outlook中的收件人电子邮件地址。该代码应位于Access数据库的模块中。
如果可能的话,我也想读这个主题。
很难在Web上找到答案,尽管有一些Access和VBA的经验,但我什至不知道如何开始。
编辑:从德米特里(Dmitry)的答案中,我发现this遍历了检查员,
Private Sub Form_Timer()
Dim myInspectors As Outlook.Inspectors
Dim x As Integer
Dim iCount As Integer
Set myInspectors = Application.Inspectors
iCount = Application.Inspectors.Count
If iCount > 0 Then
For x = 1 To iCount
MsgBox myInspectors.Item(x).Caption
Next x
Else
MsgBox "No inspector windows are open."
End If
End Sub
但是会出现此编译错误:
编辑2:
我已将代码移至函数中,并且在运行Outlook时,此GetObject调用没有任何错误。但是使用此功能在2秒定时器上,我撰写电子邮件并发送时,objApp.Inspectors.Count保持为0。
Public Function checkInspectors() As Boolean
Dim myInspectors As Outlook.Inspectors
Dim OutLookWasNotRunning As Boolean
Dim objApp As Object
Set objApp = GetObject(, "Outlook.Application")
If Err.Number <> 0 Then OutLookWasNotRunning = True
Err.Clear ' Clear Err object in case error occurred.
If Not OutLookWasNotRunning Then
Set myInspectors = objApp.Inspectors
Dim x As Integer
Dim iCount As Integer
iCount = objApp.Inspectors.Count
If iCount > 0 Then
For x = 1 To iCount
Debug.Print myInspectors.Item(x).Caption
Next x
Debug.Print "---"
Else
'MsgBox "No inspector windows are open."
End If
End If
End Function
答案 0 :(得分:1)
通常会触发Application.Inspectors.NewInspector
事件,但是Outlook会为通过Simple MAPI打开的邮件禁用该事件。最好的选择是定期扫描Application.Inspectors
集合(计时器?)以检查是否有新的检查器打开。
一旦有了Inspector
对象,就可以检查Inspector.CurrentItem.Recipients
集合。
答案 1 :(得分:0)
嗯,一种可能的解决方案是开发一个Outlook加载项或VBA宏,该宏可以跟踪传出的电子邮件。用户通过检查器(在关闭检查器之前,但在用户单击“发送”按钮之后)或通过发送方法发送Microsoft Outlook项目时,将触发Application类的ItemSend事件在程序中使用Outlook项目(例如MailItem)。