打印Outlook附件而不保存在硬盘驱动器上

时间:2017-08-23 06:10:21

标签: vba outlook outlook-vba email-attachments

我有一个VBA脚本,可以循环选定的电子邮件并打印所有电子邮件中的所有PDF附件。

目前,脚本将PDF文件保存到硬盘驱动器,然后打开并打印它们。

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




   Set objFileSystem = CreateObject("Scripting.FileSystemObject")
   strTempFolder = objFileSystem.GetSpecialFolder(2).Path & "\Temp for Attachments " & Format(Now, "YYYY-MM-DD_hh-mm-ss")
   strTempFolder = "W:\my documents\test"

   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
               If InStr(strFilePath, ".pdf") <> 0 Or InStr(strFilePath, ".PDF") <> 0 Then
                   objAttachment.SaveAsFile (strFilePath)
                   Set objShell = CreateObject("Shell.Application")
                   Set objTempFolder = objShell.NameSpace(0)
                   Set objTempFolderItem = objTempFolder.ParseName(strFilePath)
                   objTempFolderItem.InvokeVerbEx ("print") 'try now
               End If



          Next objAttachment
       End If
   Next

End Sub

我想知道是否可以在不将文件保存到硬盘驱动器的情况下执行此代码,即只是从VBA中的内存中打开它们,打印它们,并且硬盘上没有它们的痕迹?

1 个答案:

答案 0 :(得分:0)

即使是“大”软件,例如Outlook,也会将PDF文件保存到本地驱动器(temp-Folder)以在另一个程序中打开它们。
这里的问题是PDF阅读器需要你想要打开的文件的参考/路径。

我建议在打印后从驱动器中删除该文件。

相关问题