【发布时间】:2017-08-23 06:10:20
【问题描述】:
我有一个 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 中从内存中打开它们,打印它们,并且在硬盘驱动器上没有它们的踪迹?
【问题讨论】:
-
即使是“大”软件,例如 Outlook,也将 PDF 文件保存到本地驱动器(临时文件夹)以在另一个程序中打开它们。这里的问题是 PDF 阅读器需要您要打开的文件的引用/路径。为什么不在打印后从驱动器中删除文件?
-
我在删除 VBA 中的文件夹及其文件时遇到了麻烦,这就是为什么我一直在寻找一种解决方案而不将文件显式保存到 HDD 的原因。但是,我在 VBA 中删除了文件和文件夹,所以你的建议最终对我有用! :) 是否可以将此问题设置为已解决/已回答?
标签: vba outlook email-attachments