Пакетная печать вложений с одинаковым именем из нескольких писем - PullRequest
0 голосов
/ 18 мая 2018

В Outlook 2013 у меня есть электронные письма, к каждому из которых прикреплен только один файл с именем «Report.pdf».

Я пытаюсь распечатать все вложения из всех выбранных писем.

Я нашел код ниже, который работает, если все вложения имеют разные имена.Можно ли изменить это так, чтобы печатать почти 150 вложений с одинаковыми именами?

Названия отчетов не имеют значения, поэтому не стесняйтесь добавлять в код то, что вам нужно.

Sub BatchPrintAllAttachmentsinMultipleEmails()
Dim objFileSystem As Object
Dim strTempFolder As String
Dim objSelection As Outlook.Selection
Dim objItem As Object
Dim objMail As Outlook.MailItem
Dim objAttachments As Outlook.Attachments
Dim objAttachment As Outlook.Attachment
Dim objShell As Object
Dim objTempFolder As Object
Dim objTempFolderItem As Object
Dim strFilePath As String
Dim DateFormat

Set objFileSystem = CreateObject("Scripting.FileSystemObject")
strTempFolder = objFileSystem.GetSpecialFolder(2).Path & "\Temp for Attachments " & Format(Now, "YYYY-MM-DD_hh-mm-ss")
'Create a new temp folder
MkDir (strTempFolder)

Set objSelection = Outlook.Application.ActiveExplorer.Selection

For Each objItem In objSelection
    If TypeOf objItem Is MailItem Then
       Set objMail = objItem
       Set objAttachments = objMail.Attachments

       'Save all the attachments in the temp folder
       For Each objAttachment In objAttachments
           strFilePath = strTempFolder & "\" & objAttachment.FileName
           objAttachment.SaveAsFile (strFilePath)

           'Print all the files in the temp folder
           Set objShell = CreateObject("Shell.Application")
           Set objTempFolder = objShell.NameSpace(0)
           Set objTempFolderItem = objTempFolder.ParseName(strFilePath)
           objTempFolderItem.InvokeVerbEx ("print")
       Next objAttachment
    End If
Next
End Sub

1 Ответ

0 голосов
/ 18 мая 2018

Вы не скажете, почему код не работает, если все вложения имеют одинаковые имена.Я предполагаю, что это потому, что SaveAsFile хочет перезаписать последний «Report.pdf» следующим «Report.pdf» до завершения печати. ​​

Моей первой мыслью было добавить Kill strFilePath перед * 1005.*.Подумав, я решил, что это не сработает, потому что Shell по-прежнему будет печатать предыдущий «Report.pdf», когда вы пытаетесь его удалить.

Я думаю, что самый простой подход будет:

Добавить

Dim Count as Long

в ваши Dims.

Заменить strFilePath = strTempFolder & "\" & objAttachment.FileName на:

Count = Count + 1
strFilePath = strTempFolder & "\" & Count & objAttachment.FileName

Это создаст и напечатает файлы с именами «1Report.pdf», «2Report.pdf »,« 3Report.pdf »и так далее.Я использовал префикс, а не традиционный суффикс, потому что он избавляет от необходимости помещать Count между именем файла и расширением.

Я предполагаю, что у вас есть какой-то метод удаления всех вложений из временной папки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...