Vba “从文件夹打印PDF”正在打开Acrobat Reader,但未发送到打印机

Vba “从文件夹打印PDF”正在打开Acrobat Reader,但未发送到打印机,vba,printing,outlook,adobe,Vba,Printing,Outlook,Adobe,我正在Outlook中整合一些VBA,以便将PDF附件从Outlook文件夹发送到C:\Temp\中的文件夹,然后将其打印到默认打印机 问题是,这会将Acrobat Reader打开到“最近”文件列表,而不会实际向默认打印机发送任何内容 我当前的代码: Option Explicit Public Sub PrintAttachments() Dim Inbox As MAPIFolder, Item As MailItem, Atmt As Attachment, FileName As St

我正在Outlook中整合一些VBA,以便将PDF附件从Outlook文件夹发送到C:\Temp\中的文件夹,然后将其打印到默认打印机

问题是,这会将Acrobat Reader打开到“最近”文件列表,而不会实际向默认打印机发送任何内容

我当前的代码:

Option Explicit
Public Sub PrintAttachments()
Dim Inbox As MAPIFolder, Item As MailItem, Atmt As Attachment, FileName As String, i As Integer, Path As String

Set Inbox = Outlook.Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Folders("Batch Prints")

For Each Item In Inbox.Items
    For Each Atmt In Item.Attachments

    Path = "C:\Temp\Batch Prints\"
    If Len(Dir(Path, vbDirectory)) = 0 Then MkDir Path
        FileName = Path & Atmt.FileName
        Atmt.SaveAsFile FileName

        Call PrintPdf(FileName)

    Next
Next

Set Inbox = Nothing
End Sub

Public Sub PrintPdf(Filepath As String)
    Shell "C:\Program Files (x86)\Adobe\Acrobat Reader 2017\Reader\AcroRd32.exe /p /h " & Chr(34) & Filepath & Chr(34), vbHide
End Sub
不会发生错误,单步执行代码不会提示任何问题,但Acrobat Reader应用程序将打开而不是打印

是否有一些明显的地方我没有将这些文件实际发送到默认打印机

谢谢大家!

尝试设置PDF

  • 选择首选项>安全性(增强)
  • 选择“启用增强的安全性”选项
  • 在“特权位置”部分中指定位置列表,以及 然后单击OK




  • 感谢您的回复。我现在不在办公室用打印机测试,但我会在尝试你上面提到的内容后给你回复!我尝试了特权位置,但它没有将其发送到打印机。然而,AcrobatReader这次没有出现,这很有趣。下次有机会我会试试ShellExecuteA。我终于可以试试你提供的代码了。与上一条评论相同:无错误&adobe未打开,但也未向打印机发送任何内容。看起来什么也没发生,虽然我已经通过了代码,所以我可以确认它确实通过了所有代码。
    Option Explicit
    Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" _
    Alias "ShellExecuteA" ( _
      ByVal hwnd As Long, _
      ByVal lpOperation As String, _
      ByVal lpFile As String, _
      ByVal lpParameters As String, _
      ByVal lpDirectory As String, _
      ByVal nShowCmd As Long _
    ) As Long
    
    Public Sub PrintAttachments()
        Dim Inbox As MAPIFolder
        Dim Item As MailItem
        Dim Atmt As Attachment
        Dim FileName As String
        Dim i As Integer
        Dim Path As String
    
        Set Inbox = Outlook.Application.GetNamespace( _
                                "MAPI").GetDefaultFolder( _
                                   olFolderInbox).Folders("Batch Prints")
    
        For Each Item In Inbox.Items
            DoEvents
            For Each Atmt In Item.Attachments
            DoEvents
    
            Path = "C:\Temp\Batch Prints\"
    
            If Len(Dir(Path, vbDirectory)) = 0 Then MkDir Path
                FileName = Path & Atmt.FileName
                Atmt.SaveAsFile FileName
    
                ShellExecute 0, "print", FileName, vbNullString, vbNullString, 0
    
            Next
        Next
    
        Set Inbox = Nothing
    End Sub