将邮件项目打印为pdf

时间:2015-07-14 09:30:03

标签: vba outlook outlook-vba

我正在尝试将Outlook中文件夹中的所有邮件项目保存为PDF格式。

Sub pdfConversion()
    Dim outApp As Object, objOutlook As Object, objFolder As Object, myItems As Object, myItem As Object
    Dim psName As String, pdfName As String

    Set outApp = CreateObject("Outlook.Application")
    Set objOutlook = outApp.GetNamespace("MAPI")
    Set objFolder = objOutlook.GetDefaultFolder(olFolderInbox).Folders("PDF Conversion")
    Set myItems = objFolder.Items

    For Each myItem In myItems
        myItem.PrintOut copies:=1, preview:=False, ActivePrinter:="Adobe PDF", printtofile:=True, _
        collate:=True, prtofilename:="C:\Users\lturner\Documents\" & myItem.Subject & ".pdf"
    Next myItem
End Sub

我使用的是Outlook 2007,它没有将邮件另存为PDF的选项,因此我尝试使用.PrintOut方法。

使用上述内容我目前正在收到一个未找到的"名称参数"错误。我已经在互联网上寻找其他地方,但似乎无法找到解决方案。

4 个答案:

答案 0 :(得分:1)

MailItem.SaveAs "somefile.doc", olDoc不接受任何参数。它使用应用程序级默认设置。

我认为这里的解决方法是两步,

第1步 使用Document.ExportAsFixedFormat "somefile.pdf", 17 转换为RTF或文档

步骤2使用文字自动化,(参考文字对象14.0)  使用fixedformat将其转换为pdf。

#!/usr/bin/perl
use strict;
use warnings;
my $date1;
my $date2;
my $expr = q{select * from foo where ts>@(-2 days) and ts < @(-1 hour)};
if( $expr =~ m#\@\((.*?)\) and .*? \@\((.*?)\)# ){
    $date1 = $1;
    $date2 = $2;
}
my $expr1 = `date --date=$date1 +%s`;
my $expr2 = `date --date=$date2 +%s`;

#now search and replace the $expr

$expr =~ s#\@\((.*?)\)#$expr1;
$expr =~ s#< \@\((.*?)\)#<.$expr2;

print "Final expression is $expr\n";

答案 1 :(得分:1)

无需使用MailItem类的 SaveAs 方法。 Inspector类的 WordEditor 属性返回表示邮件正文的Word Document类的实例。您可以直接从Outlook调用Document类的 ExportAsFixedFormat 方法,从而避免任何磁盘操作。有关详细信息,请参阅Chapter 17: Working with Item Bodies

答案 2 :(得分:1)

我使用了KrishnaEugene Astafiev发布的答案的组合来生成以下代码,现在将生成myItem中的PDF文档。

Dim objDoc As Object, objInspector As Object
For Each myItem In myItems
    fileName = Replace(myItem.Subject, ":", "")
    Set objInspector = myItem.GetInspector
    Set objDoc = objInspector.WordEditor
    objDoc.ExportAsFixedFormat folderPath & fileName & ".pdf", 17
    Set objInspector = Nothing
    Set objDoc = Nothing
Next myItem

发布此信息,以便将来遇到问题的任何人都可以看到使用WordEditor属性的工作代码。

答案 3 :(得分:-1)

只有将原始电子邮件格式化为支持单词转换的文档时,才能使用此功能。

例如,如果您尝试将自定义表单打印到PDF,则此操作将失败,因为检查器将始终将NOTHING传回给单词编辑器。