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 ответ
Решение
Я бы пошел на это:
- Определите глобальную переменную в вашем модуле, такую как
Dim TriggerMsgBox As Boolean
, По умолчанию переменная будет ложной. - Инициализируйте его как True в
myMacro1()
, Только в этом случае оно станетTrue
, Остальное будетFalse
, - Используйте это в
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