Trigger ItemSend только для определенных макросов outlook

Как бы я изменил следующий код, чтобы вызвать событие 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 ответ

Решение

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

  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
Другие вопросы по тегам