【问题标题】:Mail merge to PDF rather than Print邮件合并为 PDF 而不是打印
【发布时间】:2015-04-16 19:42:14
【问题描述】:

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

我希望将每个输出保存为使用合并中的字段命名的 PDF,而不是打印。我尝试将“ActiveSheet.PrintOut”替换为“ActiveSheet.ExportasFixedFormat”并输入 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

【问题讨论】:

  • 您希望 PDF 文件名来自哪里?
  • Filename:="C:\Users\ewilliamson\PDFs\" & HRETID & i & ".pdf" 至少会给你编号的副本
  • 最终,我希望文件名是“HRETID_Date.pdf”。 “HRETID”字段是基于“当前记录”索引的另一个工作表的间接查找,并随范围内的每一行而变化。我删除了 HRETID,只使用了“i”变量,它可以生成我需要的 pdf,但它们只是按顺序编号。如果有一种方法可以基于 i 变量包含 HRETID 并将其包含在文件名中,那么我就准备好了。谢谢!
  • Filename:="C:\Users\ewilliamson\PDFs\" & Range("HRETID").Value & ".pdf" 应该这样做
  • 成功了,非常感谢!

标签: excel vba pdf


【解决方案1】:

如果您希望文件名是动态的,那么您需要在循环内从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

【讨论】:

    【解决方案2】:

    您的 filename:= 分配中的 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 获取单元格值。

    【讨论】:

    • 工作表被构造为使用行索引和来自另一个工作表的间接查找将信息编译成报告格式。 HRETID 是从另一张表中查找的变量之一。我能够使用上面的@Tim Williams 响应生成编号的 PDF,现在我只需要为查找的不同“HRETID”值切换“i”。我可能不正确地使用“范围”。
    猜你喜欢
    • 2015-10-02
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多