Access Report - Предварительный просмотр контекстного меню - Send to Mail Recipient - Как отловить это событие? - PullRequest
0 голосов
/ 14 июня 2019

При предварительном просмотре отчета щелкните правой кнопкой мыши и выберите параметр Отправить ... -> Получатель почты.

Мне нужно перехватить это событие и выполнить код, который читает адрес электронной почты получателя какнабрал в Outlook, когда он появится.Этот код должен находиться в модуле в базе данных Access.

Если возможно, я также хотел бы прочитать тему.

Трудно найти ответы в Интернете, и, несмотря на некоторый опыт работы сAccess и VBA, я даже не знаю, с чего начать.

Редактировать: Из ответа Дмитрия я нашел этот цикл через инспекторов,

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.Но с этой функцией на таймере 2s, 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 ]

1 голос
/ 15 июня 2019

Обычно событие Application.Inspectors.NewInspector срабатывает, но Outlook отключает это событие для сообщений, открываемых через Simple MAPI. Лучше всего периодически сканировать коллекцию Application.Inspectors (таймер?), Чтобы проверить, не открыт ли новый инспектор.

Получив объект Inspector, вы можете проверить коллекцию Inspector.CurrentItem.Recipients.

0 голосов
/ 14 июня 2019

Ну, одним из возможных решений является разработка надстройки Outlook или макроса VBA, который может отслеживать исходящие электронные письма. Событие ItemSend класса Application, которое вызывается при отправке элемента Microsoft Outlook либо пользователем через инспектора (до закрытия инспектора, но после нажатия пользователем кнопки «Отправить»), либо когда Метод отправки для элемента Outlook, такого как MailItem, используется в программе.

...