Печать PDF из папки открывает Acrobat Reader, но не отправляется на принтер - PullRequest
2 голосов
/ 02 марта 2020

Я собираю несколько VBA в Outlook, чтобы отправить вложения 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 будет открываться вместо печати. ​​

enter image description here

Есть ли что-то очевидное, чего мне не хватает, чтобы иметь эти файлы на самом деле отправляются на принтер по умолчанию?

Спасибо!

1 Ответ

0 голосов
/ 03 марта 2020

Попробуйте Укажите привилегированные расположения для доверенного содержимого Параметр для PDF-файлов

  1. Выберите Настройки> Безопасность (Улучшено) .
  2. Выберите параметр «Включить усиленную безопасность» .
  3. Укажите список расположений в разделе «Привилегированные местоположения» и нажмите кнопку ОК .

Функция ShellExecuteA MSDN


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

...