Остановить Outlook VBA от отправки почты в ItemSend (), когда произошло событие ошибки - PullRequest
0 голосов
/ 14 ноября 2018

Почтовый элемент Outlook отправляется при возникновении ошибки во время выполнения в событии ItemSend (). Размещение Cancel = True в коде даже не останавливает этого. Это врожденный недостаток VBA?

Как бы мне обойти эту проблему? Любые идеи приветствуются.

Public WithEvents myApp As Outlook.Application

Sub Initialize_handler()
    Set myApp = Application
End Sub

Private Sub myApp_ItemSend(ByVal Item As Object, Cancel As Boolean)
On Error GoTo ErrorHandler_myApp_ItemSend
    Cancel = True

    ' Do something erroneous

    Exit Sub

ErrorHandler_myApp_ItemSend:
    Cancel = True
    MsgBox "Error: " Err.Description
    Err.Clear
End Sub

Ответы [ 2 ]

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

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

Option Explicit

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

    Dim objInsp As Inspector

    On Error GoTo ErrorHandler_Application_ItemSend

    ' Do something erroneous
    Err.Raise 1

    Exit Sub

ErrorHandler_Application_ItemSend:

    Cancel = True
    MsgBox "Error: " & Err.Description

    Set objInsp = Item.GetInspector

    ' Look for the mail in the drafts folder
    objInsp.Close olSave

End Sub
0 голосов
/ 14 ноября 2018

Вы не можете использовать On Error GoTo для получения события ошибки, вы можете попробовать использовать оператор If. Например:

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

On Error Resume Next

If Not Left(LCase(Item.Subject), 3) = "re:" And Not Left(LCase(Item.Subject), 3) = "fw:" Then
      prompt$ = "You sending this from " & Item.SendUsingAccount & ". Are you sure you want to send it?"
       If MsgBox(prompt$, vbYesNo + vbQuestion + vbMsgBoxSetForeground, "Check Sending Account") = vbNo Then
         Cancel = True
       End If
End If

End Sub

Для получения дополнительной информации, пожалуйста, перейдите по этой ссылке:

Предупреждать перед отправкой сообщений на неправильный адрес электронной почты

Событие Application.ItemSend (Outlook)

...