使用Excel中的VBA Outmail应用程序检测用户选择

时间:2014-05-22 15:42:24

标签: excel vba excel-vba outlook-vba

我正试图找出一种方法来检测用户是否在显示的Outlook应用程序中单击“发送”。我试过读取.Display的值类似于在使用FileDialog应用程序(someInt = .Show)时如何检测用户输入,但无济于事。我找不到关于Outmail应用程序的任何文档,因此非常感谢任何帮助。

Set olApp = CreateObject("Outlook.Application")
Set Outmail = olApp.CreateItem(olMailItem)

With Outmail
    .To = clientEmail
    .CC = projectManagerEmail
    .BCC = ""
    .Subject = projectName & " (PO # " & poNumber & ", Job #" & projectNumber & ") - " & fileType & " (" & fileName & ")"
    .Attachments.Add ActiveWorkbook.Path & "\" & fileType & "\" & folderName & "\" & fileName & ".pdf"
    .Display
    .Save 
End With 

1 个答案:

答案 0 :(得分:1)

我相信您需要拦截Outlook中的发送操作。

在Outlook中,转到VBA编辑器( Alt - F11 ),然后将其粘贴到 Microsoft Outlook对象下的 ThisOutlookSession

确保您的操作在Outlook中正常运行,然后关闭Outlook。您可能必须签署代码,根据您的环境更改宏安全设置。 取消的值决定用户是否点击了发送(例如,点击了 - >取消=假)。

由于没有直接获取取消值的方法,您可能需要在本地临时文件夹中创建一个唯一的文本文件,然后在Excel中选择它以表明它已发送。

Private Sub Application_ItemSend(ByVal oItem As Object, Cancel As Boolean)
    ' Add Operations or Sub calls here
    MyCheck01 oItem, bCancel
End Sub

Private Sub MyCheck01(ByVal oItem As Object, Cancel As Boolean)
    ' Do operations here. If Send is to be aborted, set Cancel to True.
End Sub

您还需要在Excel(Const olMailItem = 0)中定义此 olMailItem