Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Excel发送带有pdf附件的Outlook电子邮件并禁用Outlook附件关联菜单_Excel_Vba_Outlook - Fatal编程技术网

从Excel发送带有pdf附件的Outlook电子邮件并禁用Outlook附件关联菜单

从Excel发送带有pdf附件的Outlook电子邮件并禁用Outlook附件关联菜单,excel,vba,outlook,Excel,Vba,Outlook,我有VBA代码来发送Outlook电子邮件,其中附有Excel中的pdf 我正在尝试禁用Outlook附件上下文菜单,该菜单允许保存、打印附件等 这在Excel VBA中是否可行 我希望附件以读取模式打开,而用户无法保存它 Sub SendDMR() 'some code not added for simplicity Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateI

我有VBA代码来发送Outlook电子邮件,其中附有Excel中的pdf

我正在尝试禁用Outlook附件上下文菜单,该菜单允许保存、打印附件等

这在Excel VBA中是否可行

我希望附件以读取模式打开,而用户无法保存它

Sub SendDMR()

'some code not added for simplicity

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    On Error Resume Next
    With OutMail
        .To = ""
        .SentOnBehalfOfName = "GasStorage@sse.com"
        .CC = ""
        .BCC = ""
        .Subject = "Daily Management Report " & Format(Date - 1, "dd/mm/yyyy")
        .Body = "Good morning," & vbCr & vbCr & "Please find the Daily Management Report attached for " & Format(Date - 1, "dd/mm/yyyy") & "." & vbCr & vbCr & "Kind regards," & vbCr & vbCr & "Shift Trading Team" & vbCr & "SSE Gas Storage" & vbCr & "Inveralmond House, Perth" & vbCr & "T: +44 (0)1738 453960" & vbCr & "E: gasstorage@sse.com"
        .Attachments.Add strPath & strFName
        .Permission = olDoNotForward
        .PermissionService = olWindows
        .Sensitivity = olConfidential
        .Display
    End With
    On Error GoTo 0

    Set OutMail = Nothing
    Set OutApp = Nothing

End If

Exit Sub

MsgEnd:
MsgBox "Please set the print area before continuing", vbExclamation

End Sub
是的,不是。 我是说,是的,从技术上讲,这是可能的:一切都是一个窗口,喷涌和处理消息,只需要一些代码就可以劫持消息泵,截取说“打开上下文菜单”的消息,然后吃掉它

如果你真的想这样做,你可以。仔细阅读子类化,启动Spy++并开始嗅探窗口消息,然后一切都有可能


但这比API VBA代码通常处理的级别要低得多:Outlook的对象模型(AFAIK)中没有任何东西可以让您轻松/简单地通过编程访问该上下文菜单。

我不认为这是不可能的,但您很可能不想这样做。@BigBen我认为您无法手动执行此操作。我猜禁用特定的菜单需要一些严重的Win32&COM篡改和子类化、消息泵劫持和WM注入。就像我说的,不是不可能,只是。。。哇,巨大的痛苦。@MathieuGuindon这是我的猜测-这就是为什么我删除了我的评论。在任何情况下,我相信最终用户访问PDF都会有一个解决方法。生活找到了一种方法,是的=)好的,谢谢大家这也是我所想的(不可能或巨大的痛苦…),但我想在放弃之前问你们所有人