邮件合并为PDF而不是打印

时间:2015-04-16 19:42:14

标签: excel vba pdf

我使用了电子表格中的教程页面Excel提示:邮件合并 - 没有Word为100条记录创建邮件合并样式报告。使用来自另一个工作表的记录索引和间接查找都可以很好地生成我需要的报告。

我希望将每个输出保存为使用合并中的字段命名的PDF,而不是打印。我尝试用“ActiveSheet.ExportasFixedFormat”替换“ActiveSheet.PrintOut”并输入PDF规范。它在一定程度上起作用,因为我能够生成指定位置的PDF,但它只生成一个PDF而不是我试图创建的整个范围。

这是我尝试使用的代码。我已经查看了其他答案,了解如何遍历每条记录以创建单独的PDF,但一次无法生成超过单个PDF。

Public Const APPNAME As String = "Progress Report"

Option Explicit

Sub PrintForms()
    Dim StartRow As Integer
    Dim EndRow As Integer
    Dim Msg As String
    Dim HRETID As String
    Dim i As Integer

Sheets("ProgressReport").Activate
StartRow = Range("StartRow")
EndRow = Range("EndRow")
HRETID = Range("HRETID")

 If StartRow > EndRow Then
    Msg = "ERROR" & vbCrLf & "The starting row must be less than the ending row!"
    MsgBox Msg, vbCritical, APPNAME
End If

For i = StartRow To EndRow
    Range("RowIndex") = i
        ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:="C:\Users\ewilliamson\PDFs\" & HRETID, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False
Next i
End Sub

2 个答案:

答案 0 :(得分:0)

在您的文件名中看起来像HRETID的值:=赋值不会改变。 (为此,需要为循环中的每一行分配一个新值)

如果要遍历列以将该列中单元格的值分配给HRETID,请尝试以下操作:

Dim rItem as Range

for each ritem in Range("HRETID")
   ActiveSheet.ExportAsFixedFormat _
    Type:=xlTypePDF, _
    Filename:="C:\Users\ewilliamson\PDFs\" & ritem.value , _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False

next rItem

请注意,您不需要HRETID作为字符串,因为您可以从rItem获取单元格值。

答案 1 :(得分:0)

如果您希望您的文件名是动态的,那么您需要从循环内的HRETID中获取值,而不是仅仅在循环之外:

For i = StartRow To EndRow
    Range("RowIndex") = i
        ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:="C:\Users\ewilliamson\PDFs\" & _
                   Range("HRETID").Value & ".pdf", _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False
Next i