Vba 打印Outlook附件而不保存在硬盘上

Vba 打印Outlook附件而不保存在硬盘上,vba,outlook,email-attachments,Vba,Outlook,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

我有一个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
子批次PrintAllAttachmentsMultipleEmails()
Dim OBJ4文件系统作为对象
将strTempFolder设置为字符串
Dim objSelection作为Outlook.Selection
作为对象的Dim objItem
将objMail设置为Outlook.MailItem
作为Outlook.Attachments的Dim OBJAAttachments
Dim objAttachment作为Outlook.Attachment
Dim objShell作为对象
Dim objTempFolder作为对象
Dim objTempFolderItem作为对象
将strFilePath设置为字符串
设置objFileSystem=CreateObject(“Scripting.FileSystemObject”)
strTempFolder=objFileSystem.GetSpecialFolder(2).Path&“\Temp for Attachments”&格式(现在是“YYYY-MM-DD\u hh-MM-ss”)
strTempFolder=“W:\my documents\test”
MkDir(strTempFolder)
设置objSelection=Outlook.Application.ActiveExplorer.Selection
对于objSelection中的每个objItem
如果objItem的类型为MailItem,则
设置objMail=objItem
设置objAttachments=objMail.Attachments
'保存临时文件夹中的所有附件
对于ObjaAttachments中的每个ObjaAttachments
strFilePath=strTempFolder&“\”&objAttachment.FileName
如果InStr(strFilePath,“.pdf”)0或InStr(strFilePath,“.pdf”)0,则
objAttachment.SaveAsFile(strFilePath)
设置objShell=CreateObject(“Shell.Application”)
设置objTempFolder=objShell.NameSpace(0)
设置objTempFolderItem=objTempFolder.ParseName(strFilePath)
objTempFolderItem.InvokeVerbEx(“打印”)'立即重试
如果结束
下一个对象
如果结束
下一个
端接头
我想知道是否可以在不将文件保存到硬盘驱动器的情况下执行此代码,即仅从VBA内存中打开文件,打印它们,并且在硬盘驱动器上没有它们的痕迹?

即使是“大型”软件,例如Outlook,也将PDF文件保存到本地驱动器(临时文件夹),以便在另一个程序中打开它们。
这里的问题是PDF阅读器需要指向要打开的文件的引用/路径

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

即使是“大”软件,例如Outlook,也会将PDF文件保存到本地驱动器(临时文件夹),以便在其他程序中打开它们。
这里的问题是PDF阅读器需要指向要打开的文件的引用/路径


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

即使是“大”软件,例如Outlook,也会将PDF文件保存到本地驱动器(临时文件夹),以便在其他程序中打开它们。这里的问题是PDF阅读器需要指向要打开的文件的引用/路径。为什么不在打印后从驱动器中删除文件?我在VBA中删除文件夹及其文件时遇到问题,这就是为什么我在没有将文件显式保存到HDD的情况下寻找解决方案的原因。然而,我在VBA中删除了文件和文件夹,所以你的建议最终对我起了作用!:)是否可以将此问题设置为已解决/已回答?即使是“大型”软件,例如Outlook,也会将PDF文件保存到本地驱动器(临时文件夹),以便在其他程序中打开它们。这里的问题是PDF阅读器需要指向要打开的文件的引用/路径。为什么不在打印后从驱动器中删除文件?我在VBA中删除文件夹及其文件时遇到问题,这就是为什么我在没有将文件显式保存到HDD的情况下寻找解决方案的原因。然而,我在VBA中删除了文件和文件夹,所以你的建议最终对我起了作用!:)是否可以将此问题设置为已解决/已回答?