访问报告-预览上下文菜单-发送给邮件收件人-如何捕获此事件?

时间:2019-06-14 14:30:11

标签: outlook access-vba ms-access-2007

预览报告时,右键单击提供选项,发送至...->邮件收件人。

我需要捕获此事件并执行代码,以读取出现在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

但是会出现此编译错误:

Method or data member not found

编辑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

2 个答案:

答案 0 :(得分:1)

通常会触发Application.Inspectors.NewInspector事件,但是Outlook会为通过Simple MAPI打开的邮件禁用该事件。最好的选择是定期扫描Application.Inspectors集合(计时器?)以检查是否有新的检查器打开。

一旦有了Inspector对象,就可以检查Inspector.CurrentItem.Recipients集合。

答案 1 :(得分:0)

嗯,一种可能的解决方案是开发一个Outlook加载项或VBA宏,该宏可以跟踪传出的电子邮件。用户通过检查器(在关闭检查器之前,但在用户单击“发送”按钮之后)或通过发送方法发送Microsoft Outlook项目时,将触发Application类的ItemSend事件在程序中使用Outlook项目(例如MailItem)。