通过VBA取消Outlook中的项目发送事件后关闭发送邮件窗口

时间:2015-08-31 16:00:37

标签: vba outlook outlook-vba

我正在编写VBA宏以防止将电子邮件发送到指定的电子邮件地址。它是一个在ThisOutlookSession下运行的Outlook宏。代码运行正常,但问题是我无法关闭发送邮件窗口。

我添加了一行(在代码中标记),该行抛出错误&#34; 在Item.Send事件期间无法执行Item.Close命令&#34; < / em>

这是可以理解的,但我怎么能克服这个?

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

 If Item.To = "some@domain.com" Then
     Prompt$ = "Are you sure you want to send this message?"
   If MsgBox(Prompt$, vbYesNo + vbQuestion + vbMsgBoxSetForeground, "Check before Sending") = vbNo Then
    Cancel = True

    Item.Close olDiscard          ' <<< ERROR HERE 

  End If
End If

End Sub

2 个答案:

答案 0 :(得分:3)

当发送事件仍在运行时,您无法关闭项目本身,而是关闭Item Inspector

见下文:

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim objInsp As Inspector
Dim Strmsg As String
Set objInsp = Item.GetInspector
If Item.To = "testmail@gmail.com" Then
    Strmsg = "Are you sure you want to send this message?"
    If MsgBox(Strmsg, vbYesNo + vbQuestion + vbMsgBoxSetForeground, "Check before Sending") = vbNo Then
        Cancel = True
        objInsp.Close 1
    End If
End If
End Sub

答案 1 :(得分:0)

在VBA以外的语言中,您可以使用计时器 - 在计时器事件触发时启用ItemSend事件中的计时器(此时您将不在ItemSend事件处理程序中),禁用时间并关闭检查器。

我认为你不能在Outlook VBA中使用计时器......