Trigger ItemSend только для определенных макросов outlook - PullRequest
0 голосов
/ 04 ноября 2018

Как мне изменить следующий код, чтобы вызвать событие myMailItem_ItemSend только тогда, когда электронное письмо отправлено myMacro1, но не в других случаях (например, myMacro2)?

Событие должно запускаться специально для тех макросов, которые используют объект myMailItem.

Public WithEvents myMailItem As Outlook.MailItem

Public Sub Initialize_handler() 
    Set myMailItem = Outlook.MailItem
End Sub 

Private Sub myMailItem_ItemSend(ByVal Item As Object, Cancel As Boolean) 
    Dim prompt As String 
    prompt = "Are you sure you want to send " & Item.Subject & "?" 
    If MsgBox(prompt, vbYesNo + vbQuestion, "Send confirmation") = vbNo Then 
        Cancel = True 
    End If 
End Sub

'Should trigger the send confirmation msgbox
Private Sub myMacro1()
    Dim objApp As Outlook.Application
    Set objApp = Application
    Set myMailItem = objApp.ActiveInspector.CurrentItem.ReplyAll
    myMailItem.Display
End Sub

'Should NOT trigger the send confirmation msgbox
Private Sub myMacro2()
    Dim objApp As Outlook.Application
    Set objApp = Application
    Dim oEmail As Outlook.mailItem
    Set oEmail = objApp.ActiveInspector.CurrentItem.ReplyAll
    oEmail.Display
End Sub

Буду признателен за Вашу помощь.

1 Ответ

0 голосов
/ 04 ноября 2018

Я бы пошел на это:

  1. Определите глобальную переменную в вашем модуле, например Dim TriggerMsgBox As Boolean. По умолчанию переменная будет ложной.
  2. Инициализируйте его как True в myMacro1(). Только в этом случае оно станет True. Иначе это будет False.
  3. Используйте его в событии myMailItem_ItemSend: если переменная True (имеется в виду, что мы только что передали myMacro1()), вам нужно запросить MsgBox. Иначе, вы просто пройдете мимо. Конечно, не забудьте сбросить переменную на False после нажатия MsgBox, иначе вы продолжите показывать ее даже позже.

В вашем коде это будет:

Public WithEvents myMailItem As Outlook.MailItem
Dim TriggerMsgBox As Boolean '<-- NEW LINE OF CODE

Public Sub Initialize_handler() 
    Set myMailItem = Outlook.MailItem
End Sub 

Private Sub myMailItem_ItemSend(ByVal Item As Object, Cancel As Boolean) 
    Dim prompt As String 
    If TriggerMsgBox Then '<-- NEW LINE OF CODE
        TriggerMsgBox = False '<-- NEW LINE OF CODE
        prompt = "Are you sure you want to send " & Item.Subject & "?" 
        If MsgBox(prompt, vbYesNo + vbQuestion, "Send confirmation") = vbNo Then 
            Cancel = True 
        End If
    End If '<-- NEW LINE OF CODE
End Sub

'Should trigger the send confirmation msgbox
Private Sub myMacro1()
    Dim objApp As Outlook.Application
    Set objApp = Application
    Set myMailItem = objApp.ActiveInspector.CurrentItem.ReplyAll
    TriggerMsgBox = True '<-- NEW LINE OF CODE
    myMailItem.Display
End Sub

'Should NOT trigger the send confirmation msgbox
Private Sub myMacro2()
    Dim objApp As Outlook.Application
    Set objApp = Application
    Dim oEmail As Outlook.mailItem
    Set oEmail = objApp.ActiveInspector.CurrentItem.ReplyAll
    oEmail.Display
End Sub
...